小编cwi*_*olf的帖子

在joblib`Parallel`上下文中对`matlab`对象进行腌制时出错

我正在从Python上下文中并行运行一些Matlab代码(我知道,但这就是要发生的事情),并且遇到了涉及的导入错误matlab.double。相同的代码在中可以正常工作multiprocessing.Pool,因此我很难弄清楚问题出在哪里。这是一个最小的再现测试用例。

import matlab
from multiprocessing import Pool
from joblib import Parallel, delayed

# A global object that I would like to be available in the parallel subroutine
x = matlab.double([[0.0]])

def f(i):
    print(i, x)

with Pool(4) as p:
    p.map(f, range(10))
    # This prints 1, [[0.0]]\n2, [[0.0]]\n... as expected

for _ in Parallel(4, backend='multiprocessing')(delayed(f)(i) for i in range(10)):
    pass
# This also prints 1, [[0.0]]\n2, [[0.0]]\n... as expected

# Now run with default `backend='loky'`
for _ in …
Run Code Online (Sandbox Code Playgroud)

python matlab python-import python-3.x joblib

8
推荐指数
1
解决办法
344
查看次数

邮件列表的元组与平面列表

我想知道在Python 3.x中是否有一种简单的方法可以执行以下操作.假设我有两个结构列表如下:

list_a = [(1,2), (1,2), (1,2), ...]
list_b = [3, 3, 3, ...]
Run Code Online (Sandbox Code Playgroud)

生成生成器(这里通过调用函数表示funky_zip)的最简单方法是什么,这样我就可以迭代这两个列表:

>>> for a, b, c, in funky_zip(list_a, list_b):
>>>      print(a, b, c)
...
1 2 3
1 2 3
1 2 3
# and so on
Run Code Online (Sandbox Code Playgroud)

我可以这样做

for aa, b in zip(list_a, list_b):
    print(aa[0], aa[1], b)
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有一个很好的方法来做到这一点,而无需解开元组.谢谢!

python python-3.x

5
推荐指数
1
解决办法
1000
查看次数

numpy/scipy 中的哪些操作是多线程的?

我正在研究一种算法,除了使用 numpy/scipy 之外,我没有尝试对其进行并行化。看着htop,有时代码使用我的所有核心,有时只使用一个。我正在考虑使用multiprocessing或类似的东西向单线程部分添加并行性。

假设我拥有所有并行的 BLAS/MKL 库,是否有一些我可以遵循的经验法则来猜测 numpy/scipy ufunc 是否将是多线程的?更好的是,有没有地方记录了这一点?

揣摩了这一点,我已经看了:https://scipy.github.io/old-wiki/pages/ParallelProgrammingPython的:如何从多线程停止numpy的?, python/numpy 中的多线程 blas

python multithreading numpy scipy

5
推荐指数
1
解决办法
3771
查看次数

使用 Python 3 中的编码打印到标准输出

我有一个 Python 3 程序,它从 Windows-1252 编码文件中读取一些字符串:

with open(file, 'r', encoding="cp1252") as file_with_strings:
    # save some strings
Run Code Online (Sandbox Code Playgroud)

我稍后想将其写入标准输出。我尝试过这样做:

print(some_string)
# => UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in position 180: ordinal not in range(128)

print(some_string.decode("utf-8"))
# => AttributeError: 'str' object has no attribute 'decode'

sys.stdout.buffer.write(some_str)
# => TypeError: 'str' does not support the buffer interface

print(some_string.encode("cp1252").decode("utf-8"))
# => UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 180: invalid continuation byte

print(some_string.encode("cp1252"))
# => has the unfortunate result of printing …
Run Code Online (Sandbox Code Playgroud)

python character-encoding python-3.x

3
推荐指数
1
解决办法
7183
查看次数