Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
python中多线程的意外行为_Python_Unix_Python Multithreading - Fatal编程技术网

python中多线程的意外行为

python中多线程的意外行为,python,unix,python-multithreading,Python,Unix,Python Multithreading,我是python新手,尝试理解python中多线程的概念。 根据我在Unix多线程编程方面的知识,如果main函数正在终止,那么由main函数创建的线程也将被终止,而不管它们在线程中做什么工作(如果我们没有使用任何pthread_join()函数) 但是,在使用python进行多线程处理时,我没有看到这个特性。我的线程仍然在成功运行,即使我的主线程完成了它的工作。 所以我想知道,Python和Unix中的线程行为不同。。。或者我错过了什么。请帮助理解python中的线程特性。下面是我在pytho

我是python新手,尝试理解python中多线程的概念。 根据我在Unix多线程编程方面的知识,如果main函数正在终止,那么由main函数创建的线程也将被终止,而不管它们在线程中做什么工作(如果我们没有使用任何pthread_join()函数)

但是,在使用python进行多线程处理时,我没有看到这个特性。我的线程仍然在成功运行,即使我的主线程完成了它的工作。 所以我想知道,Python和Unix中的线程行为不同。。。或者我错过了什么。请帮助理解python中的线程特性。下面是我在python中使用的代码

#! /usr/bin/python
import logging
import random
import threading
import time

logging.basicConfig(level=logging.DEBUG,
                format='(%(threadName)-10s) %(message)s',
               )

class Counter(object):

def __init__(self, start=0):
    self.lock = threading.Lock()
    self.value = start

def increment(self):
    logging.debug('Waiting for lock')

    # Getting the Lock
    self.lock.acquire()
    try:
        logging.debug('Acquired lock')
        self.value = self.value + 1
    finally:
       # Releasing the Lock 
        self.lock.release()



def worker(c):
    for i in range(2):
        pause = 4 
        logging.debug('Sleeping for %0.02f', pause)
        time.sleep(pause)
        c.increment()
    logging.debug('Done')



if  __name__ == '__main__':
    counter = Counter()
    for i in range(2):
        t = threading.Thread(target=worker, args=(counter,))
        t.start()

    logging.debug('Counter: %d', counter.value)


检查文档中关于Thread.daemon的说明。“当没有活动的非守护进程线程时,整个Python程序将退出。”

不幸的是,Python中的线程化与linux线程化有点不同。而且据我所知,根据吉尔的说法,在同一时间只有一个线程在运行(!)


还有。。。当主线程终止时,它将等待线程完成,除非它们被创建为
setDaemon(True)
无论如何,您应该自己停止线程,例如通过
try
{main thread code}
最后:
doSomethingToStopThreads()

。。。你的问题是什么?这真的很模糊。您已经描述了功能,但这里没有真正的问题。
for i in range(2):
    t = threading.Thread(target=worker, args=(counter,))
    t.setDaemon(True)
    t.start()