案例1:子进程会将主进程的数据拷贝一份,造成两次打印
import multiprocessingdef task():print(name)file_object.write("alex\n")file_object.flush()if __name__ == '__main__':multiprocessing.set_start_method("fork")name = []file_object = open('x1.txt', mode='a+', encoding='utf-8')file_object.write("武沛齐\n")p1 = multiprocessing.Process(target=task)p1.start()# 输出:武沛齐 # 这个是子进程alex # 这个是子进程武沛齐 # 这个是主进程
案例2:flush以后,进程中内存的数据会清空释放
import multiprocessingdef task():print(name)file_object.write("alex\n")file_object.flush()if __name__ == '__main__':multiprocessing.set_start_method("fork")name = []file_object = open('x1.txt', mode='a+', encoding='utf-8')file_object.write("武沛齐\n")file_object.flush()p1 = multiprocessing.Process(target=task)p1.start()
案例3:子进程中的主线程锁释放了,其他子线程才能进入
import multiprocessingimport threadingimport timedef func():print("来了")with lock:print(666)time.sleep(1)def task():# 拷贝的锁也是被申请走的状态# 被谁申请走了? 被子进程中的主线程申请走了for i in range(10):t = threading.Thread(target=func)t.start()time.sleep(2)lock.release()if __name__ == '__main__':multiprocessing.set_start_method("fork")name = []lock = threading.RLock()lock.acquire()# print(lock)# lock.acquire() # 申请锁# print(lock)# lock.release()# print(lock)# lock.acquire() # 申请锁# print(lock)p1 = multiprocessing.Process(target=task)p1.start()
