Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/382.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 - Fatal编程技术网

线程与多处理器Python

线程与多处理器Python,python,Python,下面的脚本正在使用python线程: import logging import threading import time def thread_function(name): logging.info("Thread %s: starting", name) time.sleep(2) logging.info("Thread %s: finishing", name) if ____name____ == "____main____": format

下面的脚本正在使用python线程:

import logging
import threading
import time

def thread_function(name):
    logging.info("Thread %s: starting", name)
    time.sleep(2)
    logging.info("Thread %s: finishing", name)


if ____name____ == "____main____":

    format = "%(asctime)s: %(message)s"
    logging.basicConfig(format=format, level=logging.INFO,
                        datefmt="%H:%M:%S")
    logging.info("Main    : before creating thread")
    x = threading.Thread(target=thread_function, args=(1,))
    logging.info("Main    : before running thread")
    x.start()
    logging.info("Main    : wait for the thread to finish")
    # x.join()
    logging.info("Main    : all done")
上述脚本的输出为:

10:04:50:Main:创建线程之前
10:04:50:Main:运行线程之前
10:04:50:线程1:启动
10:04:50:Main:等待线程完成
10:04:50:Main:全部完成
10:04:52:螺纹1:精加工
当我使用多处理器时:

from multiprocessing import Process
import time
import logging


def thread_function(name):
    logging.info("Thread %s: starting", name)
    time.sleep(2)
    logging.info("Thread %s: finishing", name)

if ____name____ == "____main____":

    format = "%(asctime)s: %(message)s"
    logging.basicConfig(format=format, level=logging.INFO,
                        datefmt="%H:%M:%S")
    logging.info("Main    : before creating thread")
    p1 = Process(target=thread_function, args=(1,))
    logging.info("Main    : before running thread")
    p1.start()
    logging.info("Main    : wait for the thread to finish")
    p1.join()
    logging.info("Main    : all done"
它没有捕获进程正在调用的函数的输出,如下面的输出所示:

10:08:58:Main:创建线程之前
10:08:58:Main:运行线程之前
10:08:58:Main:等待线程完成
10:09:00:Main:全部完成

有人能告诉我这里缺少了什么吗?

线程不同于进程

生成一个新的进程,该进程独立于主进程运行,但是一个绑定到父程序的新执行任务

当您创建一个线程时,您的程序正在与其子线程共享所有内容(如变量、函数等),因此您可以从线程中记录一些事件。但是,在一个新的过程中,您最初与主程序共享的只是一些描述符和信息(谁是家长,谁是孩子,等等)。在您的情况下,当您登录到一个新进程时,您基本上是创建一个与父进程无关的新日志实例

对于日常工作,我建议您只使用
线程
库,而不是
多处理
库。如果您需要使用最新版本(用于远程进程执行、守护进程创建等),我建议您阅读以下文档:


希望这有帮助

不同的流程意味着不同的
stderr