Python 并行运行两个不同的进程py 3.8
我想开发一个同时从两个设备读取输入的系统。每个进程目前都独立工作,但由于我需要同步它们,我希望它们都将输出写入同一个文件Python 并行运行两个不同的进程py 3.8,python,Python,我想开发一个同时从两个设备读取输入的系统。每个进程目前都独立工作,但由于我需要同步它们,我希望它们都将输出写入同一个文件 import multiprocessing as mp from multiprocessing import Process from multiprocessing import Pool import time # running the data aquisition from the screen def Screen(fname): for x in
import multiprocessing as mp
from multiprocessing import Process
from multiprocessing import Pool
import time
# running the data aquisition from the screen
def Screen(fname):
for x in range(1, 9):
fname.write(str(x)+ '\n')
fname.flush()
time.sleep(0.5)
print(x)
# running the data aquisition from the EEG
def EEG(fname):
for y in range(10, 19):
fname.write(str(y)+ '\n')
fname.flush()
time.sleep(0.3)
print(y)
# main program body #
# open the common file that the processes write to
fname = open('C:/Users/Yaron/Documents/Python Scripts/research/demofile.txt', 'w+')
pool = Pool(processes=2)
p1 = pool.map_async(Screen,fname)
p2 = pool.map_async(EEG,fname)
print ('end')
fname.close()
在多处理中,根据操作系统的不同,您可能无法向进程传递打开的文件句柄。以下代码适用于任何操作系统:
import multiprocessing as mp
import time
def Screen(fname,lock):
with open(fname,'a') as f:
for y in range(1,11):
time.sleep(0.5)
with lock:
print(y)
print(y,file=f,flush=True)
def EEG(fname,lock):
with open(fname,'a') as f:
for y in range(11, 21):
time.sleep(0.3)
with lock:
print(y)
print(y,file=f,flush=True)
if __name__ == '__main__':
fname = 'demofile.txt'
lock = mp.Lock()
with open(fname,'w'): pass # truncates existing file and closes it
processes = [mp.Process(target=Screen,args=(fname,lock)),
mp.Process(target=EEG,args=(fname,lock))]
s = time.perf_counter()
for p in processes:
p.start()
for p in processes:
p.join()
print (f'end (time={time.perf_counter() - s}s)')
一些注意事项:
- 在每个进程中打开文件。例如,Windows不支持fork()进程,也不继承句柄。句柄不可拾取,无法在进程之间传递
- 打开要追加的文件。两个进程将有两个不同的文件指针。Append确保每次都搜索到末尾
- 使用序列化锁保护文件访问。在主线程中创建锁,并将相同的锁传递给每个进程
- 如果使用
在主线程中运行一次性代码。一些操作系统在其他进程中导入脚本,这样可以防止代码多次运行
- 映射异步未正确使用。它需要一组参数才能传递给函数。相反,创建这两个进程,启动它们,并加入它们以等待完成