2016-12-16 52 views
0

我有一个脚本,它作为一个线程运行一个函数。该函数与主函数中的字典的内容一起工作,但不需要改变它。传递字典对象作为线程,而不是它的值

例如

from threading import Thread 

def a_func(self, dic): 
    print(str(dic)) 

some_dic={ 
    1:"A", 
    2:"B" 
} 

print(str(some_dic)) 

t = Thread(target=a_func, args=(some_dic)) 
t.start() 

输出的结果是:

{1: 'A', 2: 'B'} 
2 

我读过,传递给线程函数的第一个参数是本身 - 我误解是什么?

即使没有self的问题,该函数也不打印实际字典对象,而是打印此例中的关键字。

如何传递Dictionary对象的线程功能,导致输出:

{1: 'A', 2: 'B'} 
{1: 'A', 2: 'B'} 
+1

你试图传递* tuple *的参数吗?尝试'...,args =(some_dic,))' – jonrsharpe

+0

,导致完全相同的输出。 – SaAtomic

+1

对不起,我错过了一个括号。我已澄清,尝试一下;注意使它成为元组的尾随逗号。 – jonrsharpe

回答

1

ARGS应该是所有的函数的自变量元组,所以要通过一个字典,你需要一个字典的元组。

另外,Python要求您为一个元组添加一个逗号,以区别于仅用圆括号包装表达式。

另外,为什么你在函数中使用self? 此代码应该工作:

from threading import Thread 

def a_func(dic): 
    print dic 

some_dic={ 
    1:"A", 
    2:"B" 
} 

print(str(some_dic)) 

t = Thread(target=a_func, args=(some_dic,)) 
t.start() 
相关问题