python扭曲线程

jit*_*dra 3 python twisted

嗨,你能告诉我如何在不同的线程中使用不同的函数使用线程池在扭曲...说

我有一个id列表,x=[1,2,3,4]其中1,2,...等是id(我从数据库得到,每个都包含一些磁盘中的python脚本).

我想做的是

在列表上扫描x遍历并在不同的线程中运行每个脚本,直到它们完成


Thanx Calderone,你的代码对我帮助很大.

我很少有人怀疑我可以通过这种方式调整线程池大小.

from twisted.internet import reactor
reactor.suggestThreadPoolSize(30)
Run Code Online (Sandbox Code Playgroud)

假设所有30个可用线程都很忙并且列表中仍有一些ID(字典或元组)1 - 在这种情况下,所有ID都将被遍历?我的意思是一旦线程空闲,下一个工具(id)将被分配给释放的线程?2 - 在某些情况下,在第二个工具和另一个工具将使用一个工具输出之前必须执行一个工具,如何在扭曲的线程中管理它.3

Jea*_*one 14

Twisted中的线程主要用于twisted.internet.threads.deferToThread.或者,有一个更灵活的新界面twisted.internet.threads.deferToThreadPool.无论哪种方式,答案大致相同.迭代您的数据并使用其中一个函数将其分派给一个线程.你可以Deferred从任何一个回来,它会告诉你什么是结果,什么时候可用.

from twisted.internet.threads import deferToThread
from twisted.internet.defer import gatherResults
from twisted.internet import reactor

def double(n):
    return n * 2

data = [1, 2, 3, 4]

results = []
for datum in data:
    results.append(deferToThread(double, datum))

d = gatherResults(results)
def displayResults(results):
    print 'Doubled data:', results
d.addCallback(displayResults)
d.addCallback(lambda ignored: reactor.stop())

reactor.run()
Run Code Online (Sandbox Code Playgroud)

您可以在线程howto中阅读有关Twisted中线程的更多信息.