Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,创建线程然后join()比正常的阻塞过程有什么好处吗?_Python_Multithreading_Multiprocessing - Fatal编程技术网

在Python中,创建线程然后join()比正常的阻塞过程有什么好处吗?

在Python中,创建线程然后join()比正常的阻塞过程有什么好处吗?,python,multithreading,multiprocessing,Python,Multithreading,Multiprocessing,在Python中,创建线程然后join()比正常的阻塞过程有什么好处吗?例如,此代码是否为: def sleep(): time.sleep(5) print "start..." t = threading.Thread(target=sleep) t.start() t.join() print "end..." 再好不过了: def sleep(): time.sleep(5) print "start..." sleep() print "end..." 是否存在

在Python中,创建线程然后join()比正常的阻塞过程有什么好处吗?例如,此代码是否为:

def sleep():
    time.sleep(5)

print "start..."
t = threading.Thread(target=sleep)
t.start()
t.join()
print "end..."
再好不过了:

def sleep():
    time.sleep(5)

print "start..."
sleep()
print "end..."

是否存在其中一个优于另一个的用例或情况?

通常,如果您在单个线程上加入,那么与非线程方法相比,没有多少好处

我能想到的唯一一件事是,您可以为指定超时来限制计算可能需要的时间。这在没有线程的情况下也是可能的,但需要修改目标函数(定期检查是否已达到时间限制)。对
join
使用超时对底层函数是透明的


显然,如果您有多个线程,那么连接其中一个或多个线程与单线程程序截然不同,因为线程并行工作,而只有主线程等待连接完成。

这两个线程都不好,因为它们都没有意义。请用一个实际问题来说明您的问题。调用
join(timeout)
不会限制后台线程中的计算可能需要的时间。它只会限制调用线程愿意等待它的时间。@jameslarge您是对的,我是草率的。谢谢你的澄清!在
join(timeout)
返回后,需要调用
is\u alive
来检查线程是否仍在运行并(如果仍在运行)停止它——理想情况下是以合作的方式。