小编Abd*_*dir的帖子

multiprocessing.pool.imap是否有一个允许多个参数的变体(如starmap)?

我正在对大量字节进行一些计算.该进程在大块字节上运行.我试图使用多处理并行处理来提高性能.最初我尝试使用pool.map,但只允许单个参数,然后我找到了pool.starmap.但是pool.starmap仅在所有进程完成后才给出结果.我想要结果(有点).我正在尝试使用pool.imap,它在进程完成时提供结果,但不允许多个参数(我的函数需要2个参数).而且,结果的顺序很重要.

下面的一些示例代码:

pool = mp.Pool(processes=4)
y = []
for x in pool.starmap(f, zip(da, repeat(db))):
    y.append(x)
Run Code Online (Sandbox Code Playgroud)

上面的代码有效,但只在完成所有进程后才给出结果.我看不到任何进展.这就是为什么我尝试使用pool.imap,效果很好但只有一个参数:

pool = mp.Pool(processes=4)
y = []
for x in pool.imap(f, da)):
    y.append(x)
Run Code Online (Sandbox Code Playgroud)

在多个参数上引发以下异常:

TypeError: f() missing 1 required positional argument: 'd'
Run Code Online (Sandbox Code Playgroud)

寻找实现所有3个要求的简单方法:

  1. 使用多个参数/参数进行并行处理
  2. 设法在流程运行时查看进度
  3. 有序的结果.

谢谢!

python windows python-multiprocessing

8
推荐指数
2
解决办法
3159
查看次数

在 Windows 中保存到文本文件时出现“UnicodeEncodeError: 'charmap' codec can't encode character”

我在 Windows 7 上使用 Python 3.4。我的程序生成一些数字(范围 0-255),然后将它们转换为 ascii 字符 (chr) 并创建一个字符串。现在我想将此字符串的内容保存在文本文件中。它给了我以下错误:

UnicodeEncodeError: 'charmap' codec can't encode character '\x8e' in position 6: character maps to <undefined>
Run Code Online (Sandbox Code Playgroud)

请注意,字符串的长度是可变的,任何和所有代码 (0-255) 都可能出现。

示例代码:

file = open('somefiliename.txt', 'w')
file.write(result) #result being the string variable containing ascii chars.
file.close()
Run Code Online (Sandbox Code Playgroud)

我可以打印结果字符串,并且使用 print(result) 没有错误。但它没有保存到文件。

结果 = '' for y in range(4): for x in range(4): result += chr(matrix[x, y]) print(result)

代码很长,我在相关的上面添加了。matrix 是一个 numpy 二维 (4x4) 矩阵,用于存储数字。

python file-io ascii windows-7

0
推荐指数
1
解决办法
4051
查看次数