python多线程失败,一直只有一个线程的解决办法

在学python多线程的时候,照着网上的代码,一模一样的!!别人多线程,我一直单线程,很离谱。

代码如下

import threading
import time

def job_1():
    print('This is a new threading')
    for i in range(10):
        time.sleep(0.2)
    print('T1 was finished')

def job_2():
    print('This is a new different threading')
    print('T2 was finished')

def main():
    print(threading.current_thread().getName())
    new_threading_1 = threading.Thread(target=job_1())  #定义一个新线程,线程的名称,要做什么工作
    new_threading_2 = threading.Thread(target=job_2())
    new_threading_1.start()  #添加线程,开始准备工作
    new_threading_2.start()
    print('process was finished')
if __name__=='__main__':
    main()

但是结果却是按顺序,按部就班的出来

 

 在找了很多东西之后,在简书发现一篇帖子:https://www.jianshu.com/p/79372add4c45

然后,我照着改了一下,发现还真是。在设置线程的语句里,target的值不要加括号

print(threading.current_thread().getName())
    # new_threading_1 = threading.Thread(target=job_1())  #定义一个新线程,线程的名称,要做什么工作
    new_threading_1 = threading.Thread(target=job_1)
    # new_threading_2 = threading.Thread(target=job_2())
    new_threading_2 = threading.Thread(target=job_2)

在做了这样的小修改后,运行程序,可以按预期的来

 

 

 

---------2021.3.12更新------------

BakaFT老哥回复了关于解决函数参数的问题,但是还有一个细节要注意

 添加参数最好使用[]而不是(),虽然俩个方式都可以用。

import threading


def scan(a,b):
        for i in range(10):
                print(i,":",a,b)


t1 = threading.Thread(target=scan,args=(100,200))  #使用的括号()
t2 = threading.Thread(target=scan,args=[200,300])  #使用的方括号[]

t1.start()
t2.start()
t1.join()
t2.join()

 输出

 

 

但是当函数只有一个参数时,结果就不一样了

import threading


def scan(a):
        for i in range(10):
                print(i,":",a)

t1 = threading.Thread(target=scan,args=(100))
t2 = threading.Thread(target=scan,args=[200])
t1.start()
t2.start()
t1.join()
t2.join()

 结果:

 

 报错了  argument after * must be an iterable, not int

因为如果使用()来传递参数,要这样子

t1 = threading.Thread(target=scan,args=(100,200,300))

 如果只有一个参数,逗号也不能省略

t1 = threading.Thread(target=scan,args=(100,))

 所以还是推荐使用[]

 

posted @ 2020-02-16 14:44  This_is_Y  阅读(4917)  评论(1编辑  收藏  举报