要するに、osスレッドをzerorpcで使用することはできません。
長い答え:zerorpc-pythonはIOにgeventを使用します。つまり、あなたのプロジェクトはgeventを使用し、それと互換性がなければなりません。ネイティブOSスレッドとジワントコルーチン(グリーンレット、グリーンスレッドなどとも呼ばれます)は本当は友人ではありません。
gevent(http://www.gevent.org/gevent.threadpool.html)には、ネイティブスレッドプールオプションがあります。
ネイティブOSスレッドを生成してそこにgeentコルーチン(zerorpcを含む)を実行することはできません。
あなたはgeventコルーチンと作品をやっているすべては、その後、代わりにネイティブスレッドでrun()
を実行するので、geventコルーチン/ greenlet/greenthreadそうのようにそれを実行した場合:
# starts the server in its own greenlet
gevent.spawn(myserver.run)
# zerorpc will spawn many more greenlet as needed.
# they all need to run cooperatively
# here we are continuing on the main greenlet.
# as a single greenlet can execute at a time, we must never block
# for too long. Using gevent IOs will cooperatively yield for example.
# Calling gevent.sleep() will yield as well.
while True:
gevent.sleep(1)
注:場合ときにはgeventは選択肢ではありませんが、解決策はgeventを使用せずPythonの外部にIOを実装するzerorpc-pythonのバージョンを実装することですが、これは面白い複雑さがあり、すぐには起こりません。
私はこれが何のために誤解してしまったと思いますか?もちろんブロックされ、メッセージを受け取るのを待っています。なぜあなたはプログラムを「続行しますか? –
それは大きなプロジェクトであり、第2面とのコミュニケーションはそれの一部です。私は自分のスレッドで動作するHW(arduino)と通信し、すべての通信はメインスクリプトで制御する必要があります。私は分かりません。多分アプリケーションデザインが悪いのですが、どうすればいいと思いますか? @DanielRoseman –