【问题标题】:Alternative python library for managing threads用于管理线程的替代 python 库
【发布时间】:2012-09-26 00:46:21
【问题描述】:
我对生成子进程有一些烦恼,比如获得正确的输出等等。一个包装库envoy,通过一个易于使用的界面解决了我的所有问题,消除了大多数问题。
使用线程,我有时会遇到无法结束的挂起进程、在我无法再访问的线程中启动的外部程序等等问题。
那里有任何“傻瓜线程”python 库吗?谢谢
【问题讨论】:
标签:
python
multithreading
【解决方案1】:
那里有任何“傻瓜线程”python 库吗?
不,没有。 threading 在简单的情况下使用起来非常简单。你想用它在你的程序中引入并发。这意味着您希望在两个或多个动作同时发生时使用它,即同时发生。
这就是让彼得盖房子的同时让伊戈尔开车去莫斯科的方法:
from threading import Thread
import time
def drive_bus():
time.sleep(1)
print "Igor: I'm Igor and I'm driving to... Moskow!"
time.sleep(9)
print "Igor: Yei, Moskow!"
def build_house():
print "Peter: Let's start building a large house..."
time.sleep(10.1)
print "Peter: Urks, we have no tools :-("
threads = [Thread(target=drive_bus), Thread(target=build_house)]
for t in threads:
t.start()
for t in threads:
t.join()
是不是很简单?定义要在另一个线程中运行的函数。创建一个threading.Thread 实例,其函数为target。到目前为止,什么都没有发生,直到您调用 start。它触发线程并立即返回。
在让你的主线程退出之前,你应该等待你产生的所有线程完成。这就是t.join() 所做的:它阻塞并等待线程t 完成。只有这样它才会返回。
【解决方案2】:
我建议阅读更多有关实际 Python 库的信息 - 它很简单。您的线程挂起问题(如果它阻止您的应用程序退出)可以通过使用守护线程来解决。
您想要完成什么样的任务?如果您尝试在不实际使用自定义线程的情况下并行运行任务,您可能会发现包 multiprocessing 很有用。此外,python wiki 上有一条关于parallel processing 的有趣信息。
你能详细说明一下这个任务吗?