进程: 所有资源的集合,当一个程序运行时调用的所有资源,例如:硬件资源,软件资源等等, 多进程:是对该程序需要所有资源的一种拷贝,进程与进程之间相对独立。

线程: 程序运行时CPU对函数,方法等的一种调度,多线程指的是同一时间可以干很多事,就像一个会分身术的人一样,同一时间可以搞多个分身,来干不同的事情,有主人(主线程)负责整体运行。

一个进程里面可以有多个线程,反之不成立。

例如:

import multiprocessing
import threading
import time

num = 0


def nums(a):
    for i in range(a):
        global num
        num += 1
        time.sleep(1)
        print('----1----{0}'.format(num))


def nums2(a):
    for i in range(a):
        global num
        num += 1
        time.sleep(1)
        print(num, '')


def main():
    """多进程"""
    # 创建进程对象
    p1 = multiprocessing.Process(target=nums, args=(20,))
    p1.start()
    p2 = multiprocessing.Process(target=nums2, args=(20,))
    p2.start()

    # """多线程"""
    # t1 = threading.Thread(target=nums, args=(100000,))
    # t1.start()
    # t2 = threading.Thread(target=nums2, args=(100000,))
    # t2.start()

多进程运行的结果可以看出,连个进程都是独立的.。 然而,多线程则是共享全局变量的

多进程结果:

----1----1
1
----1----2
2
----1----3
3
----1----4
4
----1----5
5
----1----6
6
----1----7
7
----1----8
8
----1----9
9
----1----10
10
..........

多线程运行结果:

----1----133255
143445 

多线程的结果是因为,一个线程在运行的时候没有运行完,就被cpu清除出去,让另一个线程运行,如此循环,两个线程又共享全局变量,所以就造成了结果并非预期的200000。

解决这个问题可以用 Threading包里面的互斥锁Lock类来解决。

12-26 14:35
查看更多