gpt4 book ai didi

用于在 3 个进程之间写入(+锁定)/读取文件的 Python 脚本

转载 作者:太空宇宙 更新时间:2023-11-04 09:29:44 25 4
gpt4 key购买 nike

我是 Python 编程的新手。我需要编写一个脚本,该脚本将由 3 个新创建的进程在不同时间但非常接近地执行。资源始终需要检查文件是否被锁定,因为执行 python 脚本的第一个进程将执行命令,并锁定文件以将命令的结果写入其中。而其他 2 个进程将等待文件解锁,以便读取结果 ID 并执行与第一个进程不同的命令。

我怎样才能在 python 中实现它?谢谢

最佳答案

如果我没记错的话,这个任务可以通过使用 Lock 来完成。为了获得写入权限,一个 Semaphore通知未能获得写锁的进程将要读取文件,最后是 Barrier重新调整流程。一个例子:

import multiprocessing as mp
import time
from random import randint


def fun(lock_w, sem_r, barrier, task, filename):
me = mp.current_process()
for i in range(3):
time.sleep(randint(1, 4))
if(lock_w.acquire(block=False)):
print(me.pid, "write access")
task()
sem_r.release()
sem_r.release()
else:
sem_r.acquire()
print(me.pid, "read access")
task()
if barrier.wait() == 0:
print(me.pid, "releasing Lock")
lock_w.release()

def task1():
print("\tPerform Task 1")

def task2():
print("\tPerform Task 2")

def task3():
print("\tPerform Task 3")

lock_w = mp.Lock()
sem_r = mp.Semaphore(0)
bar = mp.Barrier(3)
t1 = mp.Process(target=fun, args=(lock_w, sem_r, bar, task1, "foo.txt", ))
t2 = mp.Process(target=fun, args=(lock_w, sem_r, bar, task2, "foo.txt", ))
t3 = mp.Process(target=fun, args=(lock_w, sem_r, bar, task3, "foo.txt", ))
t1.start()
t2.start()
t3.start()
t1.join()
t2.join()
t3.join()

示例输入:

585 write access
Perform Task 1
586 read access
Perform Task 2
587 read access
Perform Task 3
585 releasing Lock
587 write access
Perform Task 3
586 read access
Perform Task 2
585 read access
Perform Task 1
587 releasing Lock
586 write access
Perform Task 2
585 read access
Perform Task 1
587 read access
Perform Task 3
586 releasing Lock

关于用于在 3 个进程之间写入(+锁定)/读取文件的 Python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56178988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com