簡體   English   中英

Python多處理進程終止了嗎?

[英]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.

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