在Twisted中使用线程
2010-09-22 11:16:02 来源:WEB开发网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
译者注
- ››使用脚本恢复WinXP系统的用户登录密码
- ››使用phpMyadmin创建数据库及独立数据库帐号
- ››使用Zend Framework框架中的Zend_Mail模块发送邮件...
- ››使用cout标准输出如何控制小数点后位数
- ››使用nofollow标签做SEO的技巧
- ››使用 WebSphere Message Broker 的 WebSphere Tra...
- ››使用SQL Server事件探查器做应用程序的性能分析
- ››使用SQL Server事件探查器分析死锁原因
- ››使用纯文本文件打造WCF服务
- ››使用 Dojo 开发定制 Business Space 小部件,第 4...
- ››使用 ADDRESS 与 INDIRECT函数查询信息
- ››使用 COLUMN函数编制单元信息
更多精彩
赞助商链接