这里我有一个代码,它将一个字符串(s5(转换为另一个(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:
Traceback (most recent call last):
File "/Users/test/lib/python3.7/site-packages/multiprocess/pool.py", line 121, in worker
result = (True, func(*args, **kwds))
File "/Users/test/lib/python3.7/site-packages/multiprocess/pool.py", line 44, in mapstar
return list(map(*args))
File "/Users/PycharmProjects/test/Test.py", line 19, in S5_to_S4_new
s4 = table[s5[0]]['a'] + s4
KeyError: 'a'
您将如何解决这个问题,以便在这里使用多处理来获得正确的翻译?
我考虑过预拆分s5并将其分配给特定的流程。
看起来您已经定义了table
,但正在引用dna_inv_table