python线程池传入多个参数_python线程池问题

创建10个线程, 然后依次读取线程对象的值

from threading import current_thread as cthread

from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor

import time

#func函数没有传入参数

def func():

#print这行里面有i这个变量,但是func并没有传入任何参数,难道不应该在运行到这里的时候报错吗?为何能读取到i的值?

print('thread',i,cthread().ident)

time.sleep(0.5)

return cthread().ident

tp = ThreadPoolExecutor(3)

lst = []

#变量i在这里,为何func函数里面可以读取到?

for i in range(10):

res = tp.submit(func)

lst.append(res)

for i in lst:

print(i.result())

上面这段代码可以正常运行,按照我的理解,在定义func函数的时候并没有传入任何参数,为何func里面调用i变量的时候没报错呢?程序是如何读取到func函数外部的i变量值的?

我改了一下代码,给函数func传入了一个参数a,如下:

from threading import current_thread as cthread

from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor

import time

#func函数这次可以传入参数a

def func(a):

#因为传入了参数a,所以这里print可以取到a的值并打印,没问题

print('thread',a,cthread().ident)

time.sleep(0.5)

return cthread().ident

tp = ThreadPoolExecutor(3)

lst = []

for a in range(10):

#这里同步把每次循环的a的值submit到函数func的参数列表里

res = tp.submit(func,a)

lst.append(res)

for i in lst:

print(i.result())

也能正常运行。所以就很不解了,修改后的代码我是能看明白里面的逻辑的,但是之前那个func没有传入参数的一直想不明白函数内部是如何同步读取到函数func外部的值i的。

求助各位大神,万分感谢!

:D

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值