案例1:子进程会将主进程的数据拷贝一份,造成两次打印

    1. import multiprocessing
    2. def task():
    3. print(name)
    4. file_object.write("alex\n")
    5. file_object.flush()
    6. if __name__ == '__main__':
    7. multiprocessing.set_start_method("fork")
    8. name = []
    9. file_object = open('x1.txt', mode='a+', encoding='utf-8')
    10. file_object.write("武沛齐\n")
    11. p1 = multiprocessing.Process(target=task)
    12. p1.start()
    13. # 输出:
    14. 武沛齐 # 这个是子进程
    15. alex # 这个是子进程
    16. 武沛齐 # 这个是主进程

    案例2:flush以后,进程中内存的数据会清空释放

    1. import multiprocessing
    2. def task():
    3. print(name)
    4. file_object.write("alex\n")
    5. file_object.flush()
    6. if __name__ == '__main__':
    7. multiprocessing.set_start_method("fork")
    8. name = []
    9. file_object = open('x1.txt', mode='a+', encoding='utf-8')
    10. file_object.write("武沛齐\n")
    11. file_object.flush()
    12. p1 = multiprocessing.Process(target=task)
    13. p1.start()

    案例3:子进程中的主线程锁释放了,其他子线程才能进入

    1. import multiprocessing
    2. import threading
    3. import time
    4. def func():
    5. print("来了")
    6. with lock:
    7. print(666)
    8. time.sleep(1)
    9. def task():
    10. # 拷贝的锁也是被申请走的状态
    11. # 被谁申请走了? 被子进程中的主线程申请走了
    12. for i in range(10):
    13. t = threading.Thread(target=func)
    14. t.start()
    15. time.sleep(2)
    16. lock.release()
    17. if __name__ == '__main__':
    18. multiprocessing.set_start_method("fork")
    19. name = []
    20. lock = threading.RLock()
    21. lock.acquire()
    22. # print(lock)
    23. # lock.acquire() # 申请锁
    24. # print(lock)
    25. # lock.release()
    26. # print(lock)
    27. # lock.acquire() # 申请锁
    28. # print(lock)
    29. p1 = multiprocessing.Process(target=task)
    30. p1.start()