2

我对产生子进程有一些烦恼,比如获得正确的输出等等。一个包装库envoy通过一个易于使用的界面解决了我的所有问题,该界面摆脱了大多数问题。

使用线程时,我有时会遇到无法结束的挂起进程、在我无法再访问的线程中启动的外部程序等问题。

那里有任何“傻瓜线程”python库吗?谢谢

4

2 回答 2

8

那里有任何“傻瓜线程”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完成。只有这样它才会返回。

于 2012-09-25T16:39:42.830 回答
3

我建议阅读更多关于实际 Python 库的信息——它很简单。您的线程挂起问题(如果它阻止您的应用程序退出)可以通过使用守护线程来解决。

你想完成什么样的任务?如果您尝试在不实际使用自定义线程的情况下并行运行任务,您可能会发现包multiprocessing很有用。此外,python wiki 上有一条关于并行处理的有趣信息。

你能详细说明一下这个任务吗?

于 2012-09-25T16:19:59.523 回答