【发布时间】:2011-02-11 06:12:19
【问题描述】:
这里有一些代码可以说明我的问题:
def blocking1():
while True:
yield 'first blocking function example'
def blocking2():
while True:
yield 'second blocking function example'
for i in blocking1():
print 'this will be shown'
for i in blocking2():
print 'this will not be shown'
我有两个包含while True 循环的函数。这些将产生数据,然后我将记录在某个地方(很可能是一个 sqlite 数据库)。
我一直在玩线程并让它工作。但是,我真的不喜欢它......我想做的是让我的阻塞函数异步。比如:
def blocking1(callback):
while True:
callback('first blocking function example')
def blocking2(callback):
while True:
callback('second blocking function example')
def log(data):
print data
blocking1(log)
blocking2(log)
如何在 Python 中实现这一点?我已经看到标准库带有 asyncore,并且这个游戏中的大牌是 Twisted,但这两个似乎都用于套接字 IO。
如何异步我的非套接字相关的阻塞函数?
【问题讨论】:
-
What I would like to do is make my blocking functions asynchronous这没有任何意义。您要么希望函数阻塞,要么希望它异步。如果您希望它异步,请使用线程。我不明白问题出在哪里。 -
我希望我的阻塞函数是非阻塞的
-
关于这些函数的执行是如何交错的,有很多问题需要回答,不仅是彼此交错,还有你运行的所有后续代码。这就是操作系统的用途,以及为什么您通常希望将线程用于类似的事情。你能解释一下你不喜欢线程吗?这正是创建线程来解决的问题。
-
我想我不喜欢它,因为我不习惯它。我今天一直在玩它,但仍然不太明白发生了什么。我比较习惯回调的方式
标签: python asynchronous twisted nonblocking event-driven