Решить проблему зависимости с помощью многопроцессорной обработки - PullRequest
1 голос
/ 03 марта 2020

Здесь у меня есть код, который переводит одну строку (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 процессов.

1 Ответ

0 голосов
/ 03 марта 2020

Похоже, вы определили table, но ссылаетесь на dna_inv_table

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...