Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在robotframework中锁定文件_Python_Multithreading_Robotframework - Fatal编程技术网

Python 在robotframework中锁定文件

Python 在robotframework中锁定文件,python,multithreading,robotframework,Python,Multithreading,Robotframework,我使用的是机器人框架。我使用pabot并行运行测试套件 在运行时,我需要确保一个进程一次可以访问一个文件,而另一个进程应该等待进程释放该文件 我知道这可以通过python中的多线程来完成。我是python的新手。我需要帮助来解决这个问题。robot没有任何内置功能来处理文件锁定。也没有用于文件锁定的内置跨平台机制。但是,有一些外部包可以执行文件锁定。例如,该包看起来是一个很好的候选者 我建议在python中创建一个自定义关键字,在获取锁后进行读取。如果您使用的是lockfile软件包,它可能看起

我使用的是机器人框架。我使用pabot并行运行测试套件

在运行时,我需要确保一个进程一次可以访问一个文件,而另一个进程应该等待进程释放该文件


我知道这可以通过python中的多线程来完成。我是python的新手。我需要帮助来解决这个问题。

robot没有任何内置功能来处理文件锁定。也没有用于文件锁定的内置跨平台机制。但是,有一些外部包可以执行文件锁定。例如,该包看起来是一个很好的候选者

我建议在python中创建一个自定义关键字,在获取锁后进行读取。如果您使用的是lockfile软件包,它可能看起来像这样:

# lock_keywords.py
from lockfile import LockFile

def read_file_with_locking(filename):
    lock = LockFile(filename)
    with lock:
        with open(filename, "r") as f:
            data = f.read()
    return data
然后,您将在如下测试中使用它:

*** Settings ***
| Library | lock_keywords.py

*** Test Cases ***
| Read a file, with locking
| | ${data}= | Read file with locking | /tmp/junk.txt
| | log | data: ${data}

我只在Mac上进行了测试,打开一个交互式python shell,使用lockfile库获取文件锁,然后在另一个窗口中运行测试。测试暂停,直到我在交互会话中手动释放锁,此时它能够获取锁并读取文件。

当您说文件应该是“可访问的”时,您如何定义“可访问的”?你在写文件吗?从中阅读?二者都您正在删除并重新创建它吗?我只需要从文件中读取,但它应该只由进程读取。如果一个进程正在读取,另一个进程应该无法从中读取。这需要在什么平台上工作,还是需要跨平台?目前正在寻找windows,但跨平台将非常好!感谢您的快速响应:)将尝试您提供的解决方案。谢谢,阿加尼尝试了以上代码。它的工作方式很好,你测试它。但是,当我尝试使用pabot为多个测试套件运行此功能时,它失败了。两个进程同时获得锁。是因为pabot创建了两个独立的进程来运行套件吗?还注意到,在robotframework中,当读取带有锁定的文件时,执行lock-get-release,因此我遇到了上述问题。当我在pythonshell中执行带锁定的读取文件时,这种情况不会发生。@sachin:很抱歉,它对您不起作用。我目前没有办法在windows机器上测试它。@Bryan。。只有一个问题。。是否可以在一个关键字中锁定文件并在其他关键字中释放锁。这可以解决我的问题:)