Здесь у меня есть код, который переводит одну строку (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)
Я хотел бы использовать многопроцессорную обработку в течение l oop, чтобы все стало более эффективным по времени. Проблема в том, что с функцией 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 и назначении его для c процессов.