Python 为什么RxPY';s TwistedScheduler引发已调用错误?
最简单的工作示例——一个客户端使用一个可观察的Python 为什么RxPY';s TwistedScheduler引发已调用错误?,python,twisted,reactive-programming,rx-py,Python,Twisted,Reactive Programming,Rx Py,最简单的工作示例——一个客户端使用一个可观察的命令逐字向echo服务器发送'Hello world' 客户端: from rx.concurrency.mainloopscheduler import TwistedScheduler from rx.observable import Observable from twisted.internet import reactor from twisted.internet.protocol import ClientFactory from t
命令逐字向echo服务器发送'Hello world'
客户端:
from rx.concurrency.mainloopscheduler import TwistedScheduler
from rx.observable import Observable
from twisted.internet import reactor
from twisted.internet.protocol import ClientFactory
from twisted.protocols.basic import LineReceiver
class RxProtocol(LineReceiver):
def connectionMade(self):
Observable.from_list('Hello world'.split(' '), TwistedScheduler(reactor)).subscribe(self.sendLine)
def lineReceived(self, line):
print line
if __name__ == '__main__':
f = ClientFactory()
f.protocol = RxProtocol
reactor.connectTCP("localhost", 8000, f)
reactor.run()
服务器:来自twisted示例的简单回显服务器--
在服务器运行的情况下,启动客户端将提供:
C:\Program Files\Python\2.7\python.exe C:/client.py
Unhandled Error
Traceback (most recent call last):
File "C:/client.py", line 16, in <module>
reactor.run()
File "C:\Program Files\Python\2.7\lib\site-packages\twisted\internet\base.py", line 1194, in run
self.mainLoop()
File "C:\Program Files\Python\2.7\lib\site-packages\twisted\internet\base.py", line 1203, in mainLoop
self.runUntilCurrent()
--- <exception caught here> ---
File "C:\Program Files\Python\2.7\lib\site-packages\twisted\internet\base.py", line 825, in runUntilCurrent
call.func(*call.args, **call.kw)
File "C:\Program Files\Python\2.7\lib\site-packages\rx\concurrency\mainloopscheduler\twistedscheduler.py", line 36, in interval
disposable.disposable = action(scheduler, state)
File "C:\Program Files\Python\2.7\lib\site-packages\rx\concurrency\scheduler.py", line 72, in schedule_work
group.remove(d)
File "C:\Program Files\Python\2.7\lib\site-packages\rx\disposables\compositedisposable.py", line 46, in remove
item.dispose()
File "C:\Program Files\Python\2.7\lib\site-packages\rx\disposables\compositedisposable.py", line 63, in dispose
disposable.dispose()
File "C:\Program Files\Python\2.7\lib\site-packages\rx\disposables\disposable.py", line 34, in dispose
self.action()
File "C:\Program Files\Python\2.7\lib\site-packages\rx\concurrency\mainloopscheduler\twistedscheduler.py", line 42, in dispose
handle[0].cancel()
File "C:\Program Files\Python\2.7\lib\site-packages\twisted\internet\base.py", line 89, in cancel
raise error.AlreadyCalled
twisted.internet.error.AlreadyCalled: Tried to cancel an already-called event.
C:\Program Files\Python\2.7\Python.exe C:/client.py
未处理错误
回溯(最近一次呼叫最后一次):
文件“C:/client.py”,第16行,在
反应堆运行()
文件“C:\Program Files\Python\2.7\lib\site packages\twisted\internet\base.py”,第1194行,正在运行
self.mainLoop()
文件“C:\Program Files\Python\2.7\lib\site packages\twisted\internet\base.py”,第1203行,在mainLoop中
self.rununtlcurrent()
--- ---
文件“C:\Program Files\Python\2.7\lib\site packages\twisted\internet\base.py”,第825行,在rununtlcurrent中
call.func(*call.args,**call.kw)
文件“C:\Program Files\Python\2.7\lib\site packages\rx\concurrency\mainloopscheduler\twistedscheduler.py”,第36行,间隔
一次性。一次性=操作(调度程序,状态)
文件“C:\Program Files\Python\2.7\lib\site packages\rx\concurrency\scheduler.py”,第72行,在schedule\u work中
组。删除(d)
文件“C:\Program Files\Python\2.7\lib\site packages\rx\disposables\compositedisposable.py”,删除中第46行
项目.处置()
文件“C:\Program Files\Python\2.7\lib\site packages\rx\disposables\compositedisposable.py”,第63行,在dispose中
一次性处置
文件“C:\Program Files\Python\2.7\lib\site packages\rx\disposables\disposable.py”,第34行,在dispose中
自我行动
文件“C:\Program Files\Python\2.7\lib\site packages\rx\concurrency\mainloopscheduler\twistedscheduler.py”,第42行,在dispose中
句柄[0]。取消()
文件“C:\Program Files\Python\2.7\lib\site packages\twisted\internet\base.py”,第89行,取消
raise error.AlreadyCalled
twisted.internet.error.AlreadyCalled:尝试取消已调用的事件。
我做错了什么