Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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在多处理期间更新数据库_Python_Python 3.x_Multithreading_Multiprocessing - Fatal编程技术网

Python在多处理期间更新数据库

Python在多处理期间更新数据库,python,python-3.x,multithreading,multiprocessing,Python,Python 3.x,Multithreading,Multiprocessing,我使用多处理并行执行作业,我的目标是使用多cpu核心,因此我选择多处理模块而不是线程模块 现在我有了一个方法,它使用子流程模块来执行LinuxShell命令,我需要过滤它并将结果更新到DB 对于每个线程,子进程执行时间可能不同。一些线程的输入执行时间可能为10秒,其他线程的输入执行时间可能为15秒 我关心的是总是会得到相同的线程执行结果或不同的线程执行结果 或者我必须去锁定机制,如果是的话,你能提供我的例子,适合我的要求 下面是示例代码: #!/usr/bin/env python import

我使用多处理并行执行作业,我的目标是使用多cpu核心,因此我选择多处理模块而不是线程模块

现在我有了一个方法,它使用子流程模块来执行LinuxShell命令,我需要过滤它并将结果更新到DB

对于每个线程,子进程执行时间可能不同。一些线程的输入执行时间可能为10秒,其他线程的输入执行时间可能为15秒

我关心的是总是会得到相同的线程执行结果或不同的线程执行结果

或者我必须去锁定机制,如果是的话,你能提供我的例子,适合我的要求

下面是示例代码:

#!/usr/bin/env python
import json
from subprocess import check_output
import multiprocessing


class Test:

    # Convert bytes to UTF-8 string
    @staticmethod
    def bytes_to_string(string_convert):
        if not isinstance(string_convert, bytes) and isinstance(string_convert, str):
            return string_convert, True
        elif isinstance(string_convert, bytes):
            string_convert = string_convert.decode("utf-8")
        else:
            print("Passed in non-byte type to convert to string: {0}".format(string_convert))
            return "", False

        return string_convert, True

    # Execute commands in Linux shell
    @staticmethod
    def command_output(command):
        try:
            output = check_output(command)
        except Exception as e:
            return e, False

        output, state = Test.bytes_to_string(output)

        return output, True

    @staticmethod
    def run_multi(num):

        test_result, success = Test.command_output(["curl", "-sb", "-H", "Accept: application/json", "http://127.0.0.1:5500/stores"])
        out = json.loads(test_result)
        #Update Database is safer here or i need to use any locks




if __name__ == '__main__':
    test = Test()
    input_list = list(range(0, 1000))
    numberOfThreads = 100
    p = multiprocessing.Pool(numberOfThreads)

    p.map(test.run_multi, input_list)
    p.close()
    p.join()

取决于您在数据库中执行的更新类型

如果它是一个完整的数据库,它将有自己的锁定机制;您需要使用它们,但除此之外,它已经被设计用于处理并发访问


例如,如果更新涉及插入一行,您可以这样做;数据库将以所有行结束,每一行正好一次。

取决于您在数据库中执行的更新类型

如果它是一个完整的数据库,它将有自己的锁定机制;您需要使用它们,但除此之外,它已经被设计用于处理并发访问


例如,如果更新涉及插入一行,您可以这样做;数据库将以所有行结束,每个行正好一次。

我必须插入行,我的代码足以正确处理吗?是的,应该可以。必须看到行插入代码…我必须插入行,我的代码足以正确处理?是的,应该可以。必须看到行插入代码。。。