[英]Python Multiprocessing, Trouble Terminating Processes on Restart and Preventing Zombies
[英]Python multiprocessing processes terminating?
我已經在Stackoverflow上閱讀了許多有關Python多處理的答案,並且我認為這對我而言是最有用的: python多處理隊列實現 。
這是我想做的事情:輪詢數據庫以查找新工作,將其放入隊列中,並有4個進程連續進行工作。 我不清楚的是,當隊列中的項目完成處理后會發生什么。 在上述問題中,當隊列為空時,該過程終止。 但是,就我而言,我只是想一直等到隊列中有數據。 那我只是睡覺並定期檢查隊列嗎? 那么我的工人流程將永遠不會消亡? 那是好習慣嗎?
def mp_worker(queue):
while True:
if (queue.qsize() == 0):
time.sleep(20)
else:
db_record = queue.get()
process_file(db_record)
def mp_handler():
num_workers = 4
processes = [Process(target=mp_worker, args=(queue,)) for _ in range(num_workers)]
for process in processes:
process.start()
for process in processes:
process.join()
if __name__ == '__main__':
db_conn = db.create_postgre_connection(DB_CONFIG)
while True:
db_records = db.retrieve_received_files(DB_CONN)
if (len(db_records) > 0):
for db_record in db_records:
queue.put(db_record)
mp_handler()
else:
time.sleep(20)
db_conn.close()
是否有意義?
謝謝。
弄清楚了。 工人必須死,否則他們就永遠不會回來。 但是無論如何,當有數據時,我都會開始一組新的工作程序,所以這不是問題。 更新的代碼:
def mp_worker(queue):
while queue.qsize() > 0 :
db_record = queue.get()
process_file(db_record)
def mp_handler():
num_workers = 4
if (queue.qsize() < num_workers):
num_workers = queue.qsize()
processes = [Process(target=mp_worker, args=(queue,)) for _ in range(num_workers)]
for process in processes:
process.start()
for process in processes:
process.join()
if __name__ == '__main__':
while True:
db_records = db.retrieve_received_files(DB_CONN)
print(db_records)
if (len(db_records) > 0):
for db_record in db_records:
queue.put(db_record)
mp_handler()
else:
time.sleep(20)
DB_CONN.close()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.