Многопроцессорность выдает ошибку атрибута, почему?

1

По какой-то причине, что я не вижу, этот код выдает ошибку: AttributeError: __exit__

Код прост:

import re, string, math, numpy, time, os.path, itertools, matplotlib, subprocess, shutil, sys, scipy.spatial.distance, multiprocessing, threading, ctypes
from functools import partial
from multiprocessing.sharedctypes import Value, Array
from multiprocessing import Process, Lock

def main():
    with multiprocessing.Pool(8) as myPool:
        print("1")

if __name__ == '__main__':
   main()

Различные строки импорта предназначены для других вещей, которые я использовал с другим кодом, над которым я работаю многопоточность. Это, однако, простой "образец" кода, который я пытаюсь проанализировать, чтобы изучить веревки. Я предполагаю, что у него есть какие-то проблемы с открытием блока, но я не понимаю, почему. Разве Python 2.7 не реализует многопроцессорность таким образом? Это все примеры, которые я видел. Есть ли другой способ реализовать что-то подобное?

Я хочу, чтобы иметь возможность бросить кучу вызовов функций с немного разными входами в набор потоков и вернуть их, но это далеко, если я не могу запустить потоки.

  • 5
    функциональность управления контекстом не была добавлена до 3.3. Это, вероятно, во всех примерах, которые вы видели, потому что они используют Python 3, который вы, вероятно, должны использовать, если у вас нет веских причин не делать этого.
  • 0
    Часть кода, который мы используем, является большой и трудной для обновления до Python 3, а некоторые из приведенных здесь также отказываются от обновления (я не один из тех немногих). Но так как мой код должен работать для них тоже, к сожалению, он должен быть совместимым. Таким образом, я предполагаю, что это означает, что я должен использовать его как объект, то есть obj = multiprocessing.Pool(8) а затем obj.close() чтобы убить его?
Теги:
multithreading
python-2.7
with-statement

1 ответ

1
Лучший ответ

Некоторая простая переработка до 2.7 стандартов, и это работает.

import  multiprocessing

def somefunc(x):
    print(x)

def main():
    myPool = multiprocessing.Pool(8):
    myPool.map(range(8))

if __name__ == '__main__':
   main()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню