Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python2中线程化一个无休止的while循环_Python_Multithreading_Python 2.7 - Fatal编程技术网

在Python2中线程化一个无休止的while循环

在Python2中线程化一个无休止的while循环,python,multithreading,python-2.7,Python,Multithreading,Python 2.7,我不知道为什么这不起作用。线程一定义就开始了,并且似乎不在实际线程中。。。也许我错过了什么 import threading import time def endless_loop1(): while True: print('EndlessLoop1:'+str(time.time())) time.sleep(2) def endless_loop2(): while True: print('EndlessLoop2:'

我不知道为什么这不起作用。线程一定义就开始了,并且似乎不在实际线程中。。。也许我错过了什么

import threading
import time

def endless_loop1():
    while True:
        print('EndlessLoop1:'+str(time.time()))
        time.sleep(2)

def endless_loop2():
    while True:
        print('EndlessLoop2:'+str(time.time()))
        time.sleep(1)

print('Here1')
t1 = threading.Thread(name='t1', target=endless_loop1(), daemon=True)
print('Here2')
t2 = threading.Thread(name='t2', target=endless_loop2(), daemon=True)
print('Here3')
t1.start()
print('Here4')
t2.start()
产出:

Here1
EndlessLoop1:1446675282.8
EndlessLoop1:1446675284.8
EndlessLoop1:1446675286.81

您需要给
target=
一个可调用的对象

实际上,您正在调用
无尽的\u loop1()
,因此它会立即在主线程中执行。您要做的是:

target=endless_loop1
它通过
线程
函数对象来调用它自己

另外,
守护进程
实际上不是init参数,您需要在调用
启动
之前单独设置它:

t1 = threading.Thread(name='t1', target=endless_loop1)
t1.daemon = True

您需要给
target=
一个可调用的对象

实际上,您正在调用
无尽的\u loop1()
,因此它会立即在主线程中执行。您要做的是:

target=endless_loop1
它通过
线程
函数对象来调用它自己

另外,
守护进程
实际上不是init参数,您需要在调用
启动
之前单独设置它:

t1 = threading.Thread(name='t1', target=endless_loop1)
t1.daemon = True

因此,如果我想在执行前向线程传递一个“参数”,我必须事先声明变量
unfinal\u loop1.args=x
,然后
target=unfinal\u loop1
而不是
target=unfinal\u loop1(x)
?@s4w3d0ff否,
thread
构造函数有一个
args
参数,因此,您可以说:
Thread(name='t1',target=uncilled\u loop1,args=(x,)
因此,如果我想在执行之前向线程传递一个“参数”,我必须事先声明变量
uncilled\u loop1.args=x
,然后
target=uncilled\u loop1
而不是
target=uncilled\u loop1(x)
?@s4w3d0ff否,
Thread
构造函数有一个
args
参数,因此您可以说:
Thread(name='t1',target=uncired\u loop1,args=(x,)