- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个用于分析大型 csv 文件的脚本,因此我需要启动多处理。我使用了 multiprocessing
模块,它工作正常,但如果我尝试将输出列表写入 csv 文件,它会抛出错误:
TypeError: 'ApplyResult' object is not iterable
我查找了一些解决方案,包括 multiprocessing: TypeError: 'int' object is not iterable但无法解决问题。这是代码:
from multiprocessing import Pool
import csv
pool = Pool()
nodes = [['1001', '2008-01-06T02:12:13Z', ['']],
['1002', '2008-01-06T02:13:55Z', ['']],
['1003', '2008-01-06T02:13:00Z', ['Lion', 'Rhinoceros', 'Leopard', 'Panda']],
['1004', '2008-01-06T02:15:20Z', ['Lion', 'Leopard', 'Eagle', 'Panda', 'Tiger']],
['1005', '2008-01-06T02:15:48Z', ['Lion', 'Panda', 'Cheetah', 'Goat', 'Tiger']],
['1006', '2008-01-06T02:13:30Z', ['']],
['1007', '2008-01-06T02:13:38Z', ['Cheetah', 'Tiger', 'Goat']]]
def nodes_to_links(nodes_list):
output_list = []
for ii, elem in enumerate(nodes_list[:-1]):
for jj in range(ii + 1, len(nodes_list)):
common = set(elem[-1]).intersection(
set(nodes_list[jj][-1]))
if len(common) > 0 and common != {''}:
output_list.append([elem[0], nodes_list[jj][0], ','.join(map(str, list(common)))])
return output_list
#links = nodes_to_links(nodes) ###This works perfect without multiprocessing
links = pool.apply_async(nodes_to_links, (nodes)) ### This works if I don't write the list "links" to a csv, but not otherwise
# Write links to a csv file
def writeCSV(list_to_write, OutputFileName):
file = open(OutputFileName, 'w', newline='')
writer = csv.writer(file, quotechar='"', delimiter=';',quoting=csv.QUOTE_ALL, skipinitialspace=True)
for row in list_to_write:
writer.writerow(row)
writeCSV(links,'output_files/test.csv')
我尝试使用 pool.join()
和 pool.close()
但这也无济于事。谁能帮忙。请注意,列表 nodes
非常大,我只是在这里举一个例子,所以多处理是必不可少的。如果我的 CPU 中有 4 个内核和 8 个线程,我还可以知道如何指定处理器数量吗?
最佳答案
pool.apply_async
返回 pool.AsyncResult目的。此对象不可迭代 - 相反,您需要调用其 get()
方法 - 即 writeCSV(links.get(),'output_files/test.csv')
(可选超时)。
关于python - 多处理 - 无法将列表写入 csv(TypeError : 'ApplyResult' object is not iterable),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48244659/
multiprocessing.pool.ApplyResult 的严格 API 文档少得吓人(阅读:零)。多处理解释文档谈到了 ApplyResult,但没有定义它们。 这似乎也适用于 multip
我有一个用于分析大型 csv 文件的脚本,因此我需要启动多处理。我使用了 multiprocessing 模块,它工作正常,但如果我尝试将输出列表写入 csv 文件,它会抛出错误: TypeError
我是一名优秀的程序员,十分优秀!