Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用多处理解决依赖问题_Python_Multiprocessing - Fatal编程技术网

Python 用多处理解决依赖问题

Python 用多处理解决依赖问题,python,multiprocessing,Python,Multiprocessing,这里我有一个代码,它将一个sting(s5)转换为另一个sting(s4)。 为此使用了一个表,以确保没有任何内容在一行中出现两次。因此,除第一个元素外,每个元素都依赖于前面的元素。例如,零件为“cd”,因此新零件前的元素为“c”,然后代码将在c处查找字典,并将“d”转换为“2” #!/usr/bin/python import pathos s5 = 'bcdabadbcadbcabdcbadcbadcbadcbadcbadcbadcbadcbadcbadcbadcbadcbadcbadc

这里我有一个代码,它将一个sting(s5)转换为另一个sting(s4)。 为此使用了一个表,以确保没有任何内容在一行中出现两次。因此,除第一个元素外,每个元素都依赖于前面的元素。例如,零件为“cd”,因此新零件前的元素为“c”,然后代码将在c处查找字典,并将“d”转换为“2”

#!/usr/bin/python

import pathos

s5 = 'bcdabadbcadbcabdcbadcbadcbadcbadcbadcbadcbadcbadcbadcbadcbadcbadcbadcbd'

def S5_to_S4_new(s5, ):

    table = {
        'a': {'d': '0', 'c': '1', 'b': '2'},
        'b': {'a': '0', 'd': '1', 'c': '2'},
        'c': {'b': '0', 'a': '1', 'd': '2'},
        'd': {'c': '0', 'b': '1', 'a': '2'}
    }

    s4 = ''
    for i in range(len(s5) - 1, 0, -1):
        s4 = table[s5[i]][s5[i - 1]] + s4
    s4 = table[s5[0]]['a'] + s4

    print(s4)

    return s4

pathos.helpers.freeze_support()
pool = pathos.multiprocessing.Pool(processes = 2)
s4 = pool.map(S5_to_S4_new, s5)
我希望在for循环中使用多处理,这样一切都变得更加高效。问题是,使用map函数,您不知道字符串将被剪切到哪里,元素的转换取决于它们之前的元素。因此,我总是会遇到这样的错误:

multiprocess.pool.RemoteTraceback:
回溯(最近一次呼叫最后一次):
worker中的文件“/Users/test/lib/python3.7/site packages/multiprocess/pool.py”,第121行
结果=(True,func(*args,**kwds))
文件“/Users/test/lib/python3.7/site packages/multiprocess/pool.py”,第44行,在mapstar中
返回列表(映射(*args))
文件“/Users/PycharmProjects/test/test.py”,第19行,S5至S4新
s4=表[s5[0]['a']+s4
KeyError:'a'
您将如何解决此问题,以便在此使用多处理来获得正确的翻译


我考虑过预拆分s5并将其分配给特定流程。

看起来您已经定义了
,但正在引用
dna\u inv\u表
看起来您已经定义了
,但正在引用
dna\u inv\u表

请检查这里-我做了,但找不到即时解决方案。。是吗?
map
应该将字符串视为字符列表,并在每个字符上拆分它-每个进程只得到一个字符。如果可能,您应该手动拆分它。但是,如果每个字符都依赖于前一个字符,那么它是无用的,因为一个进程必须等待前一个进程的结果,它将在一个进程中运行一样长的时间,甚至更长的时间。我同意!那么,还有什么其他想法可以让这个循环在多处理中更快吗?我可以改变什么/docheck这里-我做了,但找不到即时解决方案。。是吗?
map
应该将字符串视为字符列表,并在每个字符上拆分它-每个进程只得到一个字符。如果可能,您应该手动拆分它。但是,如果每个字符都依赖于前一个字符,那么它是无用的,因为一个进程必须等待前一个进程的结果,它将在一个进程中运行一样长的时间,甚至更长的时间。我同意!那么,还有什么其他想法可以让这个循环在多处理中更快吗?我能换什么。实际上是同一张桌子。。我打错了所以你可以忽略。实际上是同一张桌子。。我打错了所以你可以忽略