Развертывание API REST API для запросов POST + машинное обучение [дубликат]

Если вы являетесь пользователем Windows и используете python 3, этот пост поможет вам выполнить параллельное программирование в python. Когда вы запускаете обычное программирование пула библиотеки многопроцессорности, вы получите сообщение об ошибке в отношении основной функции вашей программы. Это связано с тем, что в Windows нет функции fork (). Следующая статья дает решение указанной проблемы.

http://python.6.x6.nabble.com/Multiprocessing-Pool-woes-td5047050.html

Поскольку я использовал питон 3, я немного изменил программу:

from types import FunctionType
import marshal

def _applicable(*args, **kwargs):
  name = kwargs['__pw_name']
  code = marshal.loads(kwargs['__pw_code'])
  gbls = globals() #gbls = marshal.loads(kwargs['__pw_gbls'])
  defs = marshal.loads(kwargs['__pw_defs'])
  clsr = marshal.loads(kwargs['__pw_clsr'])
  fdct = marshal.loads(kwargs['__pw_fdct'])
  func = FunctionType(code, gbls, name, defs, clsr)
  func.fdct = fdct
  del kwargs['__pw_name']
  del kwargs['__pw_code']
  del kwargs['__pw_defs']
  del kwargs['__pw_clsr']
  del kwargs['__pw_fdct']
  return func(*args, **kwargs)

def make_applicable(f, *args, **kwargs):
  if not isinstance(f, FunctionType): raise ValueError('argument must be a function')
  kwargs['__pw_name'] = f.__name__  # edited
  kwargs['__pw_code'] = marshal.dumps(f.__code__)   # edited
  kwargs['__pw_defs'] = marshal.dumps(f.__defaults__)  # edited
  kwargs['__pw_clsr'] = marshal.dumps(f.__closure__)  # edited
  kwargs['__pw_fdct'] = marshal.dumps(f.__dict__)   # edited
  return _applicable, args, kwargs

def _mappable(x):
  x,name,code,defs,clsr,fdct = x
  code = marshal.loads(code)
  gbls = globals() #gbls = marshal.loads(gbls)
  defs = marshal.loads(defs)
  clsr = marshal.loads(clsr)
  fdct = marshal.loads(fdct)
  func = FunctionType(code, gbls, name, defs, clsr)
  func.fdct = fdct
  return func(x)

def make_mappable(f, iterable):
  if not isinstance(f, FunctionType): raise ValueError('argument must be a function')
  name = f.__name__    # edited
  code = marshal.dumps(f.__code__)   # edited
  defs = marshal.dumps(f.__defaults__)  # edited
  clsr = marshal.dumps(f.__closure__)  # edited
  fdct = marshal.dumps(f.__dict__)  # edited
  return _mappable, ((i,name,code,defs,clsr,fdct) for i in iterable)

После этой функции вышеупомянутый код проблемы также немного изменился:

from multiprocessing import Pool
from poolable import make_applicable, make_mappable

def cube(x):
  return x**3

if __name__ == "__main__":
  pool    = Pool(processes=2)
  results = [pool.apply_async(*make_applicable(cube,x)) for x in range(1,7)]
  print([result.get(timeout=10) for result in results])

И я получил вывод как:

[1, 8, 27, 64, 125, 216]

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

4
задан davidism 19 May 2015 в 15:11
поделиться

1 ответ

В Python (и большинстве языков), где код находится в пакете, отличается от рабочего каталога при запуске программы. Все относительные пути относятся к текущему рабочему каталогу, а не к файлу кода, в котором он написан. Таким образом, вы бы использовали относительный путь nltk_data/ даже из чертежа, или вы использовали бы абсолютный путь и не оставляли бы двусмысленности.

Атрибут root_path в приложении (или плане) относится к каталогу пакета для приложения (или плана). Присоедините свой относительный путь к этому, чтобы получить абсолютный путь.

resource_path = os.path.join(app.root_path, 'enltk_data')

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


project    /    app    /    blueprint
                       /    data

                            ^ join with root_path to get here
                ^ app.root_path always points here, no matter where cwd is
^ current working directory
10
ответ дан davidism 15 August 2018 в 15:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: