python - 我们如何运行 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_encodings
在recognize
一个名为Face_Recog
.
load_encodings
会将 media 文件夹中的图像转换为特征编码,并将这些编码存储known_faces
在文件中的全局列表 ( ) 中camera.py
。
recognize
将首先从一个相机帧中提取图像并对其进行编码,然后将其与known_faces
.
现在,只要文件夹的数量media
发生变化(如果我们从前端上传图像),那么我们的initial_count
incheck.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
。
(这是有效的。)
现在,当我上传 的图像时bob
,initial_count
值会发生变化check.py
,它会调用 的load_encodings
函数camera.py
(它正在调用它;我已经使用 print 语句进行了检查)。
现在这个函数将再次编码存在的图像,即jon
和bob
,并更新全局变量,即known_faces
。
(它正在更新,但仅在正在运行的 shell 中,而check.py
不是在正在运行的 shell 中camera.py
。即它没有反映camera.py
文件known_faces
变量中的更改,该变量在不同的 shell 实例中运行)。
因此,即使它正在更改known_faces
变量,该recognize
函数也无法识别bob
,即known_faces
它正在使用的变量 ( ) 不会自动更新。
我想做一些事情,比如每当有人从前端上传任何图像时,它的编码应该在文件(camera.py
)中更新,而不需要停止相机,即recognize
函数不应该停止它的执行。
PS。注意:这两个文件,即camera.py
和check.py
一直在 2 个不同的 shell 中运行。
请告诉我是否有可能,或者是否有任何其他方法可以实现这一目标。
解决方案
对于您的方案,最简单的解决方法可能是check.py
监视文件并在必要时重新启动其他进程。
推荐阅读
- c - 海龟图形程序。为什么它不起作用?
- javascript - 使用javascript的对象中具有最高值的不同日期
- python - Pyspark Dataframe:检查日期列中的值是否有效
- javascript - async.waterfall:错误:回调已被调用而没有循环
- python - 如何使用 pybind11 进行绑定?
- c# - .NET Core Npgsql.EntityFrameworkCore ILikeExpression
- collections - 如何从“分块”块构建列表?
- sql - SELECT UDAF(AGGR()) HAVING 中的奇怪行为
- ruby-on-rails - 多态关联有很多关系
- python - 链接 Cortana 警报/通知和 Python