嗨,你能告诉我如何使用线程池在不同的线程中使用不同的函数吗 在扭曲的...说
我有一个 ids 列表 x=[1,2,3,4]
其中 1,2,...etc 是 ids(我从数据库中得到,每个都包含 python 脚本在某些磁盘中)。
我想做的是
扫描列表中的 x 遍历并在不同线程中运行每个脚本,直到它们完成
谢谢 Calderone,您的代码对我帮助很大。
我毫不怀疑我可以通过这种方式调整线程池的大小。
from twisted.internet import reactor
reactor.suggestThreadPoolSize(30)
假设所有 30 个可用线程都忙并且列表(字典或元组)中仍有一些 ID 1-这种情况会遍历所有id吗?我的意思是一旦线程空闲下一个工具(id) 将分配给释放的线程? 2-在某些情况下,一个工具必须在第二个工具之前执行,并且一个工具的输出将被另一个工具使用,如何在双线程中进行管理。 3
最佳答案
Twisted 中的线程主要通过 twisted.internet.threads.deferToThread
使用。或者,有一个稍微更灵活的新接口(interface) twisted.internet.threads.deferToThreadPool
。不管怎样,答案大致相同。迭代您的数据并使用其中一个函数将其分派(dispatch)给线程。您从其中任何一个返回一个 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()
您可以在 threading howto 中阅读有关 Twisted 中线程的更多信息.
关于 python 扭曲线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3243431/