2017-07-29 36 views
1

我试图从2个文件多核读取数据,但执行此代码后list1list2是空的。多进程从文件读取

from multiprocessing import Process 

def getfile(fn, out): 
    print("start reading file {}".format(fn)) 
    with open(fn) as file: 
     for line in file: 
      out.append(line) 

if __name__ == '__main__': 
    file1 = [] 
    file2 = [] 
    p1 = Process(target=getfile, args=("100.txt", file1)) 
    p2 = Process(target=getfile, args=("98.txt", file2)) 
    p1.start() 
    p2.start() 

    p1.join() 
    p2.join() 
    print(file1) 
    print(file2) 

如何从文件获取写入数据列表或使用多处理可迭代的东西?

+0

看看[这个](https://stackoverflow.com/a/29050564/6111440) –

+0

如果你为了性能的目的而试图做到这一点,你需要知道如果两个文件都驻留在同一物理旋转磁盘同时读取它们都不能使整体读取时间更快,事实上可能会使磁盘读取速度变慢,因为磁盘磁头可能会做额外的搜索。 –

回答

2

当使用多个进程时,请使用QueuesPipes在您的父进程和您生成的进程之间交换数据。

管道直观地允许您在父进程和子进程之间传递数据。

队列允许您的子进程在队列中存储一些数据,以便您的父进程检索它。

就你而言,队列是最有意义的,因为看起来你的父进程不需要在子进程产生后将任何数据传递给子进程。

下面是一个文件的示例:

from multiprocessing import Process, Queue 

def getfile(fn, out): 
    with open(fn) as file: 
     for line in file: 
      out.put(line) 

if __name__ == '__main__': 
    file1 = Queue() 
    p1 = Process(target=getfile, args=("100.txt", file1)) 
    p1.start() 
    file1.get() //returns lines of the file 
    p1.join() 

您可以在同一队列传递到两个过程,只要注意消息可能的情况下,这两个文件你想分开之间混合的顺序每个文件的内容。

+0

哇!谢谢!但如何从2个文件中分离数据? – Entro

+0

创建两个队列。将不同的进程传递给每个进程,然后将数据分离 –