如果我正确地理解了这个问题,您希望从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