c和指针课后题答案python⽆限循环语句的代码_如何在Python中实现⾮阻塞⽆限
循环
我有⼀个⽆限循环,从⽹络摄像头读取视频帧,每个帧将通过⼀个复杂的功能,需要⾼计算能⼒.因此,当显⽰帧时,由于阻塞代码,程序会感觉有点迟钝.
我现在打算做的是,
2021最火手帐边框
>仅在⽬标对象出现时收集前⼏帧
>将它们放⼊单独的线程中以避免代码阻塞.
python基础代码语句
我每秒测量⽹络摄像头捕获的帧数,即~28帧.因此,while循环每秒只收集前5个帧并在另⼀个线程中处理所有这些帧,并在完成所有5个函数后返回结果.
我试图使⽤’Pool’和’Queue’但是⽆法使它⼯作,循环仍然被阻⽌.下⾯的代码模糊地表⽰我的程序现在的样⼦,我回家后会编辑它,现在使⽤⼿机发布.
def detect(frame):
# detect target object from images
pass
def nn(frame):
# some heavy processing code
pass
count = 0
stack = []
while True:
frame = cv2.imread(0)
detected = detect(frame)
# stop collecting images when collected 5
springcloud架构设计if detected and count <= 5:
stack.append(frame)
count += 1
# start processing
if len(stack) == 5:
p = Pool(4)
results = p.map(nn, frame)
p.close()
p.join()
# reset
stack = []
count = 0
我的概念是否正确?或者我需要做⼀些像协程⼀样的事情?最佳答案 我⽤
rq解决了这个问题.
python的简单消息队列.
⾸先,需要异步运⾏的⽅法的实现.
它将运⾏你的nn函数,在这种情况下,
然后,为消息队列设置⼀个简单的配置,
我使⽤redis包中的connectionPool.
基本上,您将整个任务发送到由rq worker执⾏的并⾏进程. def nn(frame):
# some heavy processing code
pass
def asynch_call(frame):
p = Pool(4)
results = p.map(nn, frame)
p.close()
cmdjava环境配置p.join()
pool = redis.ConnectionPool(
host=HOST,
port=PORT,
password=PASS,
db=0)
r = redis.Redis(connection_pool=pool)
q = Queue('nn_queue', connection=r)
count = 0
stack = []
while True:
frame = cv2.imread(0)
detected = detect(frame)
# stop collecting images when collected 5
if detected and count <= 5:
stack.append(frame)
count += 1
# start processing
if len(stack) == 5:
job = q.enqueue(asynch_call, frame, timeout=any_long_timeout )
if job.status=='queued':
print("Job submission ok")
# resetsql必知必会第五版百度云
stack = []
count = 0
为了启动⼀个将处理异步调⽤的worker,你有⼏个选项,为Worker创建⾃⼰的代码,或者只是在⼀个单独的终端中运⾏以下命令:rq worker nn_queue
请参阅上⾯使⽤的队列名称命令以发送作业.
我希望它有所帮助.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。