关于Python-threading中的args参数传递到std中

示例代码及标注如下

import threading

# 创建全局ThreadLocal对象:
local_school = threading.local()

def process_student():
    # 获取当前线程关联的student:
    std = local_school.student
    #以下这句证明了std是args的第一个元素的值
    if isinstance(std,list):
        print(std[2]['Hello'])
    print('Hello, %s (in %s)' % (std, threading.current_thread().name))

def process_thread(name):
    # 绑定ThreadLocal的student:
    local_school.student = name
    process_student()

t1 = threading.Thread(target= process_thread, args=(['Alice',123,{"Hello":"seek"}],), name='Thread-A')
t2 = threading.Thread(target= process_thread, args=('Bob',), name='Thread-B')
t1.start()
t2.start()
t1.join()
t2.join()

结果如下:
Aaron
可以看到,第一个参数的第三个参数是dict类型,,不是string.
而且所有的参数都是在args的第一个元素内传递的.

Windows下fork()进程

和Unix下一样,windows下也可以fork一个子进程.

不过需要引用multiprocessing.Process模块.

代码如下:

from multiprocessing import Process
import os

def run_proc(name):
    print('Run child process %s (%s)...' % (name,os.getpid()))

if __name__ == '__main__':
    print('Parent process %s.' % os.getpid())
    p=Process(target=run_proc,args=('test',))

    print('Child process will start.')
    p.start()
    p.join()
    print('Child process end.')

之后运行需要在cmd下运行.因为创建子进程的命令无法在IDLE中执行.(或者说进程的pid就是IDLE的pid?)

结果如下: