如果我正確地理解了這個問題,您希望從Python的外部端口接收一些數據,請將其聚合,然後將其傳輸到Erlang。
在情況下,如果你可以用你的Python代碼線程你也許可以做到這一點通過以下方式:
- 運行外部端口接收循環中的一個線索
- 一旦數據彙總推它作爲一個消息去Erlang。 (可惜你不能目前使用的線程和Python和ErlPort叫二郎功能)
下面是一個例子Python模塊與ErlPort工作:
from time import sleep
from threading import Thread
from erlport.erlterms import Atom
from erlport import erlang
def start(receiver):
Thread(target=receive_loop, args=[receiver]).start()
return Atom("ok")
def receive_loop(receiver):
while True:
data = ""
for chunk in ["Got ", "BIG ", "Data"]:
data += chunk
sleep(2)
erlang.cast(receiver, [data])
的for
環代表了一些數據彙總程序。
而且在二郎殼它的工作原理是這樣的:
1> {ok, P} = python:start().
{ok,<0.34.0>}
2> python:call(P, external_port, start, [self()]).
ok
3> timer:sleep(6).
ok
4> flush().
Shell got [<<"Got BIG Data">>]
ok
隨着「讀從端口的一些數據:」你的意思是從外部設備或二郎口唸嗎?爲什麼你需要首先在Python中聚合數據? – hdima
是的,我們必須讀取數據的代碼是在Python中,我們不能改變它,因爲是一個更大的圖片的一部分,我們沒有控制 – Khashayar