- 主题:请教并发读取数据并写入同一个变量/文件
有一万个同类文件,串行读取,得到一个dataframe,然后添加到list中,全部读完后再将该list以concat得到汇总的结果
现在想再在读取环节改为并发,用processpoolexecutor执行,但是每个进程读取的结果无法写到list中,执行完list还是空
请教应该如何实现并发过程同时向同一个list写结果?谢谢
--
FROM 210.83.240.*
multi-Process多个进程之间不共享内存,读取的结果要用pickle汇总到主进程
【 在 VANGE 的大作中提到: 】
: 有一万个同类文件,串行读取,得到一个dataframe,然后添加到list中,全部读完后再将该list以concat得到汇总的结果
: 现在想再在读取环节改为并发,用processpoolexecutor执行,但是每个进程读取的结果无法写到list中,执行完list还是空
: 请教应该如何实现并发过程同时向同一个list写结果?谢谢
--
FROM 208.78.215.*
多谢,研究了下发现没法搞定,现在我多了一次读写:一万个文件并发执行读取和筛选等动作,结果写入硬盘,得到一万个清洗后的新文件,然后再串行读这一万个结构完全相同的新文件。以上方案能提高一部分效率,但还没有完全达到预期
想问问python下还有没有其他方案,能提高大量同类文件的读取效率,谢谢!
【 在 Palmtenor 的大作中提到: 】
: multi-Process多个进程之间不共享内存,读取的结果要用pickle汇总到主进程
:
--
FROM 14.103.161.*
主进程建一个大share memory,给每个文件分配位置,开多进程读文件往那个share meory写。
【 在 VANGE 的大作中提到: 】
: 多谢,研究了下发现没法搞定,现在我多了一次读写:一万个文件并发执行读取和筛选等动作,结果写入硬盘,得到一万个清洗后的新文件,然后再串行读这一万个结构完全相同的新文件。以上方案能提高一部分效率,但还没有完全达到预期
: 想问问python下还有没有其他方案,能提高大量同类文件的读取效率,谢谢!
:
: ...................
--
修改:maming FROM 106.120.131.*
FROM 106.120.131.*
具体“没法搞定”的是哪部分?
如果实在不想用pickle,可以像楼上说的,用asyncio然后就可以多线程而不是多进程了,其实也不错
【 在 VANGE 的大作中提到: 】
: 多谢,研究了下发现没法搞定,现在我多了一次读写:一万个文件并发执行读取和筛选等动作,结果写入硬盘,得到一万个清洗后的新文件,然后再串行读这一万个结构完全相同的新文件。以上方案能提高一部分效率,但还没有完全达到预期
: 想问问python下还有没有其他方案,能提高大量同类文件的读取效率,谢谢!
:
: ...................
--
FROM 208.78.215.*
还是没法搞定并发往同一个变量写东西,只能增加一次IO,把主要工作并发处理掉,写到硬盘中,然后再串行读取这些结构上更简单的中间结果文件
我再研究下asyncio,多谢
【 在 Palmtenor 的大作中提到: 】
: 具体“没法搞定”的是哪部分?
: 如果实在不想用pickle,可以像楼上说的,用asyncio然后就可以多线程而不是多进程了,其实也不错
:
--
FROM 210.83.240.*
给我的感觉并不像特别困难。
我记得是可以用一个双向的queue还是两个queue来做。大体思路主进程向queue分发文件路径,作为生产者。子进程从queue里get文件路径进行消费,读取文件内容,将结果通过queue返回,主进程get到结果进行拼装。
如果想要分布到多台机器可以使用celery,类似的思路
【 在 VANGE 的大作中提到: 】
: 有一万个同类文件,串行读取,得到一个dataframe,然后添加到list中,全部读完后再将该list以concat得到汇总的结果
: 现在想再在读取环节改为并发,用processpoolexecutor执行,但是每个进程读取的结果无法写到list中,执行完list还是空
: 请教应该如何实现并发过程同时向同一个list写结果?谢谢
- 来自「最水木 for iPhone 8」
--
FROM 61.149.74.*
并发IO应该用多线程,而不是多进程
asyncio应该是对的
【 在 VANGE 的大作中提到: 】
--
修改:ZHMZFFL FROM 60.1.4.*
FROM 60.1.4.*