WEB开发网
开发学院软件开发Python 在Twisted中使用线程 阅读

在Twisted中使用线程

 2010-09-22 11:16:02 来源:WEB开发网   
核心提示:1以线程安全的模式运行代码Twisted中的大部分代码都不是线程安全的,例如protocol向transport写入数据就不是线程安全的,在Twisted中使用线程,因此我们需要一种方法来在主事件循环中进行调度,者可以使用函数 twisted.internet.interfaces.IReactorThreads.ca

1 以线程安全的模式运行代码

Twisted中的大部分代码都不是线程安全的。例如protocol向transport写入数据就不是线程安全的。因此我们需要一种方法来在主事件循环中进行调度。者可以使用函数 twisted.internet.interfaces.IReactorThreads.callFromThread 来实现:

from twisted.internet import reactor
def notThreadSafe(x):
  """做一些非线程安全的事情"""
  # ...
def threadSafeScheduler():
  """以线程安全方式运行"""
  reactor.callFromThread(notThreadSafe,3) #将会运行notThreadSafe(3)在主时间循环中

Note

译者注

callFromThread 意指从线程调用,这个方法是供线程调用的,并且使其指定的函数加入到主事件循环中执行。比如worker线程可以调用此方法将提交结果的函数加入到主事件循环中。这样就可以确保多线程的运行worker,而有可以使用线程安全的方式提交结果。

2 在线程中运行代码

有时我们希望在线程中运行代码,比如阻塞的存取API。Twisted提供了这样做的方法在 IReactorThread API 中。附加的工具在包 twisted.internet.threads 中提供。这些方法允许我们把任务排队以后在线程池中运行。

例如,在线程中运行一个函数,我们可以:

from twisted.internet import reactor
def aSillyBlockingMethod(x):
  import time
  time.sleep(2)
  print x
# 在线程中运行
reactor.callInThread(aSillyBlockingMethod,"2 secodns have passed")

Note

译者注

1 2  下一页

Tags:Twisted 使用 线程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接