2013-01-25 6 views
1

Попытка получить значение, которое устанавливается в методе, выполняемом в многопроцессорном процессе, будет использоваться «основным» процессом после его завершения.Использование диспетчера для изменения переменных между процессами многопроцессорности

В настоящее время он дает мне

TypeError: 'str' object does not support item assignment 
DID WE? [''] 

Который, ээ, это не совсем то, что я хочу, учитывая следующий код:

def load_dat_site(d): 
global seek_site 
browser.execute_script("window.location = '"+seek_site+"';") 
print "SITE LOADED" 
d[0] = 'YEAH!' 


manager = Manager() 
d = manager.list(['']) 
site_load_process = multiprocessing.Process(target=load_dat_site, args=(d)) 
site_load_process.start() 
site_load_process.join(15) 
print "DID WE?", d 

Есть ли причина, почему примеров скриптов, кажется, чтобы быть в состоянии установить значения своих списков, но это невозможно?

ответ

2

Из (подчеркивание добавлено) the multiprocessing.Process documentation:

"args является аргументом кортеж для целевого вызова."

Внесите свой экземпляр multiprocessing.Process в соответствие с тем, что показано ниже, и все будет работать так, как ожидалось.

site_load_process = multiprocessing.Process(target=load_dat_site, 
              args=(d,)) # the comma is essential! 

Существует самодостаточным, работающий пример здесь: http://ideone.com/VeTFYk


Помните, что НЕ скобки/круглые скобки, которые делают кортеж, это запятой.

>>> not_a_tuple = (0) 
>>> type(not_a_tuple) 
<type 'int'> 

>>> t = 0, 
>>> type(t) 
<type 'tuple'> 
+0

Грамотность распространяется через крышу. Благодаря тонну. –

+0

Добро пожаловать. – bernie

Смежные вопросы