首页 > 解决方案 > 我们如何运行 2 个并行共享公共变量的 python 脚本?

问题描述

首先让我解释一下场景。

我的项目是使用 Django 构建的。

我有前端,我们可以在其中上传一个人的图像。该图像将存储在我们本地计算机的(媒体文件夹)中。

例如:如果图像名称是jon.jpeg,那么它将被存储为

media
-jon
--jon.jpeg

如果上传了另一张图片,比如bob.jpg,那么结构将如下所示:

media
-jon
--jon.jpeg
-bob
--bob.jpg

现在我有一个 Python 脚本(比如check.py),我们在其中运行一个无限循环,并且每 5 秒检查一次媒体文件夹中的文件夹数量。此外,我们正在维护一个全局变量,check.py用于跟踪 initial_count。

现在我有另一个 Python 文件正在运行(即camera.py),它有 2 个函数,即load_encodingsrecognize一个名为Face_Recog.

load_encodings会将 media 文件夹中的图像转换为特征编码,并将这些编码存储known_faces在文件中的全局列表 ( ) 中camera.py

recognize将首先从一个相机帧中提取图像并对其进行编码,然后将其与known_faces.

现在,只要文件夹的数量media发生变化(如果我们从前端上传图像),那么我们的initial_countincheck.py就会发生变化。我们给出了一个条件,如果initial_count值发生变化,它将调用文件的encoding函数camera.py

check.py

from camera import Face_Recog,object

initial_count = 0
while True:
    count = 0
    for path in os.listdir(path/to/media):
        count += 1
    global initial_count
    if count != initial_count:
        Face_Recog.load_encodings(object)
        initial_count = count
    sleep(5)

camera.py

known_faces = []

class Face_Recog(object):
    def load_encodings(self):
        temp = []
        #some code that will change the temp value , i.e it will load the image from media and then encode it and store the encoding in temp
        global known_faces
        known_faces = temp

    def recognize(self):
        while(True):
            #code that uses known_faces and recognizes


object = Face_Recog()
object.load_encodings()
object.recognize()

现在我在 2 个不同的 shell 中运行这两个文件。

最初媒体文件夹仅包含jon,因此known_faces将仅包含 的编码jon

known_faces = ['jon']

而且recognize功能不会识别bob,只会识别jon

(这是有效的。)

现在,当我上传 的图像时bobinitial_count值会发生变化check.py,它会调用 的load_encodings函数camera.py(它正在调用它;我已经使用 print 语句进行了检查)。

现在这个函数将再次编码存在的图像,即jonbob,并更新全局变量,即known_faces

(它正在更新,但仅在正在运行的 shell 中,而check.py不是在正在运行的 shell 中camera.py。即它没有反映camera.py文件known_faces变量中的更改,该变量在不同的 shell 实例中运行)。

因此,即使它正在更改known_faces变量,该recognize函数也无法识别bob,即known_faces它正在使用的变量 ( ) 不会自动更新。

我想做一些事情,比如每当有人从前端上传任何图像时,它的编码应该在文件(camera.py)中更新,而不需要停止相机,即recognize函数不应该停止它的执行。

PS。注意:这两个文件,即camera.pycheck.py一直在 2 个不同的 shell 中运行。

请告诉我是否有可能,或者是否有任何其他方法可以实现这一目标。

标签: pythonparallel-processing

解决方案


对于您的方案,最简单的解决方法可能是check.py监视文件并在必要时重新启动其他进程。


推荐阅读