让我解释一下:我已经在Linux上开发了一个应用程序,它分叉并执行外部二进制文件并等待它完成.结果由fork +进程独有的shm文件传递.整个代码封装在一个类中.
现在我正在考虑线程化这个过程以加快速度.拥有许多不同的类函数实例,并行地(使用不同的参数)分叉和执行二进制文件,并使用自己独特的shm文件传递结果.
这个线程安全吗?如果我在一个线程中分叉,除了安全之外,还有什么我需要注意的吗?任何建议或帮助非常感谢!
我有一个存储函数的类和一个尝试使用multiprocessing模块并行运行该函数的方法。我正在使用该nose模块测试该类,并且该nose.main()函数在运行时挂起(什么也没有发生,没有显示任何输出,必须手动告知内核停止并重新启动)。我的目录如下:
Parent/
test.py
Code/
__init__.py
code.py
tests/
test_code.py
Run Code Online (Sandbox Code Playgroud)
code.py 包含:
import multiprocessing as mp
import numpy as np
import itertools
def target(): pass
def target_star(args): return target(*args)
class FuncWrapper():
def __init__(self, fun):
self.fun = fun
def run(self, X):
try:
arg_list_objects = []
arg_list_inputs = []
for i in range(len(X)):
arg_list_objects.append(self.fun.im_self)
arg_list_inputs.append(X[i])
target.__code__ = self.fun.im_func.__code__
pool = mp.Pool(processes=mp.cpu_count()-1)
F = np.array(pool.map(target_star, itertools.izip(arg_list_objects, arg_list_inputs))).reshape(X.shape)
pool.close()
pool.join()
except:
F = self.fun(X)
return F
Run Code Online (Sandbox Code Playgroud)
try:块中的大多数代码用于使pool.map函数与类方法一起使用。 …