37,721
社区成员
发帖
与我相关
我的任务
分享
# -*-coding:utf-8-*-
from time import ctime, sleep
import threading
import numpy as np
import collections
loops = ['广州', '北京']
t_list = ['01', '02', '03']
cldas_sum = collections.deque()
class MyThread(threading.Thread):
def __init__(self, func, args, name=''):
threading.Thread.__init__(self)
self.name = name
self.func = func
self.args = args
def __call__(self):
self.result = self.func(*self.args)
def get_result(self):
try:
return self.result
except Exception:
return None
def loop(nloop):
global cldas_sum
for j in t_list:
cldas_values = []
for k in range(4):
cldas_value = nloop + str(k)
cldas_values.append(cldas_value)
cldas_values.append(j)
cldas_values.append(nloop)
cldas_sum.append(cldas_values)
#print(cldas_sum)
return cldas_sum
def main():
print('start at', ctime())
threads = []
nloops = range(len(loops))
for i in nloops:
t = MyThread(loop, (loops[i],), loop.__name__)
threads.append(t)
for i in nloops: # start threads 此处并不会执行线程,而是将任务分发到每个线程,同步线程。等同步完成后再开始执行start方法
threads[i].start()
for i in nloops: # jion()方法等待线程完成
threads[i].join()
print(threads[i].get_result())
print('DONE AT:', ctime())
if __name__ == '__main__':
main()
# -*-coding:utf-8-*-
from time import ctime, sleep
import threading
import numpy as np
loops = ['广州', '北京']
t_list = ['01', '02', '03']
cldas_sum = ['one', 'two', 'three', 'four', 'five', 'six']
class MyThread(threading.Thread):
def __init__(self, func, args, name=''):
threading.Thread.__init__(self)
self.name = name
self.func = func
self.args = args
def __call__(self):
self.result = self.func(*self.args)
def get_result(self):
try:
return self.result
except Exception:
return None
def loop(nloop):
global cldas_sum
for j in t_list:
cldas_values = []
for k in range(4):
cldas_value = nloop + str(k)
cldas_values.append(cldas_value)
cldas_values.append(j)
cldas_values.append(nloop)
cldas_sum = np.row_stack((cldas_values, cldas_sum))
#print(cldas_sum)
return cldas_sum
def main():
print('start at', ctime())
threads = []
nloops = range(len(loops))
for i in nloops:
t = MyThread(loop, (loops[i],), loop.__name__)
threads.append(t)
for i in nloops: # start threads 此处并不会执行线程,而是将任务分发到每个线程,同步线程。等同步完成后再开始执行start方法
threads[i].start()
for i in nloops: # jion()方法等待线程完成
print(threads[i].get_result())
threads[i].join()
print('DONE AT:', ctime())
if __name__ == '__main__':
main()
最终打印出来的是None,而且也试过将print放在join()后面,都是一样的结果
start at Mon Dec 4 18:23:56 2017
None
None
DONE AT: Mon Dec 4 18:23:56 2017
Process finished with exit code 0
[/quote]
一定是none啊,不知道你是不是一定要用__call__函数,我对__call__的用法不太了解,但是简单解决你问题的方法:
把self.result = self.func(*self.args)放到__init__下
from Queue import Queue
q = Queue()
...
q.put(3)
...
print q.get(3)
3# -*-coding:utf-8-*-
from time import ctime, sleep
import threading
import numpy as np
loops = ['广州', '北京']
t_list = ['01', '02', '03']
cldas_sum = ['one', 'two', 'three', 'four', 'five', 'six']
class MyThread(threading.Thread):
def __init__(self, func, args, name=''):
threading.Thread.__init__(self)
self.name = name
self.func = func
self.args = args
def __call__(self):
self.result = self.func(*self.args)
def get_result(self):
try:
return self.result
except Exception:
return None
def loop(nloop):
global cldas_sum
for j in t_list:
cldas_values = []
for k in range(4):
cldas_value = nloop + str(k)
cldas_values.append(cldas_value)
cldas_values.append(j)
cldas_values.append(nloop)
cldas_sum = np.row_stack((cldas_values, cldas_sum))
#print(cldas_sum)
return cldas_sum
def main():
print('start at', ctime())
threads = []
nloops = range(len(loops))
for i in nloops:
t = MyThread(loop, (loops[i],), loop.__name__)
threads.append(t)
for i in nloops: # start threads 此处并不会执行线程,而是将任务分发到每个线程,同步线程。等同步完成后再开始执行start方法
threads[i].start()
for i in nloops: # jion()方法等待线程完成
print(threads[i].get_result())
threads[i].join()
print('DONE AT:', ctime())
if __name__ == '__main__':
main()
最终打印出来的是None,而且也试过将print放在join()后面,都是一样的结果
start at Mon Dec 4 18:23:56 2017
None
None
DONE AT: Mon Dec 4 18:23:56 2017
Process finished with exit code 0