簡體   English   中英

如何同時使用python運行2個不同的進程?

[英]How to run 2 different processes with python at the same time?

我有一個循環腳本,可以在法語站點上獲取信息。 看起來像這樣:

def getInfos(a,b,c)

def MyLoop(filename)

在其中我通過調用getinfos

def MyLoop(filename) 
    values = getInfos()

而且效果很好。 但是有時,腳本會變慢,最后停止。 因此,我嘗試了幾個具有不同想法的模塊。 第一個模塊; 信號。 但是(主觀地)有趣的功能在Windows上不可用。 但是,我試圖在凍結時刺激執行:

def reboot(signal, frame):
    print '??FROZEN??'
    time.sleep(1)
    #sys.exit(0)
signal.signal(signal.SIGINT, reboot)      

如您所見,我嘗試了sys.exit(0) ,但太突然了,我對實際操作並sys.exit(0) 無論如何...經過兩個小時的循環,此轉換后的“ keyboard interrupt ”功能無法解決。

然后我試圖限制執行時間。 所以我發現: Multiprocessingppsignal (~5%avalaibleOnWindows) 第一個打開了30個或40個其他具有基礎的python進程。 第二個,pp,不允許並行化兩個不同的功能。 不是嗎?

你有適合我的東西嗎? 或者至少可以嘗試一些方法,弄清楚第一步在哪里?

14個月后...最后,肯定是由於缺乏經驗,我決定使用多處理。 將一些機器人作為執行者,並將其中1個作為可能凍結的外部進程的檢查者/殺手。

首先,多處理方法:

#my_mp.py
import multiprocessing as mp
import actions as ac
bot_ids = list('ab')
if __name__ == '__main__':
    jobs = []
    for bot_id in bot_ids:
        p = mp.Process(target=ac.Act , args=(bot_id,))
        jobs.append(p)  ;  p.start()

然后,什么是多處理的:

#actions.py
import time,random,glob,os,psutil
#________________________
def check_or_kill(eXe,bTm):
    age_max = 900
    if time.time() - bTm > age_max:
        for proc in psutil.process_iter():
            if  (proc.name == eXe):proc.kill()
    return
#________________________
def Act(bot_id):
    checker = random.choice(list('ab'))
    if bot_id not in checker:
        f = open('stTime_%s.txt'%bot_id , 'w')  ;  f.write('%s'%(time.time()))  ; f.close()
        #launch the execution file and then, when it's done :
        os.remove('stTime_%s.txt'%bot_id)
    else:
        #get their inner birthtime.
        while glob.glob('localfolder_path','stTime_*.txt') != []: check_or_kill('soft.exe',birthtime)
    return

對於異步編程,請嘗試扭曲

這是一本適合初學者的好書: Twisted Introduction

您的流程是否掛在Web請求上? 在標准庫urllib2中,有一個函數urllib2.urlopen ,它帶有一個可選的timeout參數。 如果這是您要使用的,請嘗試設置超時參數並處理請求失敗的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM