python multiprocessing.Pool join()函数超时吗?

时间:2019-09-10 13:05:28

标签: python python-3.x multithreading python-multiprocessing pool

我正在运行一个I / O密集型程序,方法是使用multithreading.Pool库将其分成许多进程。当我在Python 3.6上的Jupiter中运行代码时,没有任何问题。

但是,当我在Django服务器上运行完全相同的代码时,有时,线程根本就不会加入。这与Jupiter笔记本的输入相同。我知道线程/进程已完成执行,因为我在每个线程的开头和结尾都有打印语句,并且可以看到所有线程都已完成,但是它们根本没有加入。

我的代码如下:

from multiprocessing import Pool


def run_thread(arg_one, arg_two):

    print ("Thread started")

    # Do stuff

    print ("Thread ended")

thread_list = []
pool = Pool(processes = number_of_processes, maxtasksperchild = 500)
for key, val in some_dict.items():

        # Run thread
        thread_list.append(pool.apply_async(run_thread, (arg_one, arg_two))

pool.close()
pool.join()
print ("All processed have joined.")

我已经查看了其他一些答案,并且发现了类似这样的内容:

from multiprocessing import Pool


def run_thread(arg_one, arg_two):

    print ("Thread started")

    # Do stuff

    print ("Thread ended")

thread_list = []
pool = Pool(processes = number_of_processes, maxtasksperchild = 500)
for key, val in some_dict.items():

        # Run thread
        thread_list.append(pool.apply_async(run_thread, (arg_one, arg_two))


for t in thread_list:
    try:
        t.get(timeout = 5)
    except: 
        print ("Timeout occurred")

pool.close()
pool.join()
print ("All processed have joined.")

我想要的是,如果线程在超时间隔内运行,只需杀死它并继续前进即可。在上述解决方案中,我仍然必须等到所有线程都运行后才能到达最终的打印语句,其中显示“所有进程都已加入”。

请原谅我对线程/进程的使用。我的意思是在每种情况下都是过程。

0 个答案:

没有答案