import datetime
import multiprocessing
import  multiprocessing  #导入一个进程程模块
import threading      #导入线程模块
from time import sleep


def now_time():
    time=datetime.datetime.now()

    print("线程开始启动",time)
    sleep(5)
    time1 = datetime.datetime.now()
    print("线程结束",time1)
if __name__ == '__main__':#只能以文件的形式执行线程与进程,不能以模块的方式去调用

    p1 = multiprocessing.Process(target=now_time,name='进程1',daemon=True)# 实例化进程,target是指定这个线程要干的事,name是指定线程的名字(不指定操作系统会自动给线程命名),daemon是让主线程等待子线程任务结束主线程再结束
    p1.start()#让进程开始运行
    time = datetime.datetime.now()
    print("程序开始启动",time)
    sleep(5)
    time = datetime.datetime.now()
    print("程序结束",time)
# if __name__ == '__main__':
#     p1 = threading.Thread(target=now_time)
#     p1.start()
#     time = datetime.datetime.now()
#     print("程序开始启动", time)
#     sleep(5)
#     time = datetime.datetime.now()
#     print("程序结束", time)

注意点:

进程

     1、进程是操作系统分配的所以操作系统先调用谁谁就先启动

     2、进程与进程之间是独立的

     3、进程.start(),其实调用的是run()方法所以在设置多进程时可以直接,进程.run()方法的形式启动线程,但是需要重写run方法

     4、进程是无序的

线程

      1、线程是由进程来分配的,线程先调用谁谁就先启用,线程无法独立于进程存在

      2、线程是无序的

      3、线程与线程之间是共享属性的

小方法:

     1、daemon=True,默认为False,守护主进程模式(主进程结束,子进程自动结束)

     2、进程名.join()等待子进程结束主进程才结束

     3、进程名.terminate(),强行结束进程