首先,我有两个脚本,分别是scr1.py和scr2.py。这两个脚本独立(与两个守护程序一样)连续运行,不同的是scr1.py需要在发生某些情况时(例如scr2.py写入“事件”)从scr2.py知道。
我试图获得的东西是scr2.py在需要时写在某个地方,然后scr1.py轮询以知道scr2.py何时写。
我的想法就像是在linux系统调用中分叉两个进程,但是在两个python脚本之间。
我已经看到了很多答案,所有答案都与子进程模块有关,第二个进程使用Popen和stdout = PIPE运行,但是后者仅在第二个结束时才将数据返回给第一个(不应该发生)因为scr2.py还会执行其他操作)。 同时,其他一些关于多处理模块,该模块在使用管道或队列时可以很好地工作,但是我更喜欢将第二个进程放在单独的脚本中而不是第一个脚本的功能中。类似于(用伪代码):
'''
run(scr2.py)
while True:
#comm_resource should have a behavior similar to pipes, where when one end is read, the value is removed from it (set to None or to a default value)
if comm_resource!='':
#do something
#go on with something else
''''
while True:
if something_happened: #a general condition
write_to_comm_resource('something happened')
#keep doing other stuff
我希望问题已经很清楚了,不幸的是,我还没有找到任何可以满足这种要求的东西,所以我现在没有编写任何代码。 然后,我的问题是关于两个并行脚本之间的通信,其中第二个并行脚本进行写操作,而第一个对此进行轮询(如果轮询结果为空,现在不重要,紧随其后的是对该资源进行写操作,第一个脚本将再次对其进行轮询,并且可以接受此延迟)。 我宁愿避免使用文件,因为在非易失性存储器上的写操作数量有限。
编辑:我发现我可以使用Popen启动该进程,使用poll()检查它是否正在运行,并可以使用stdout.readline()来读取该行。它可以以某种方式工作,但是如果我在子进程中有一个time.sleep(1),我将无输出。