Skip to content
This repository has been archived by the owner on Oct 28, 2021. It is now read-only.

Racing condition v readMat #1

Open
petermlakar opened this issue Jun 2, 2021 · 0 comments
Open

Racing condition v readMat #1

petermlakar opened this issue Jun 2, 2021 · 0 comments

Comments

@petermlakar
Copy link

Izvajanje callback funkcije v novi niti, na kanalu, kjer prebira numpy matriko s funkcijo readMat, povzroči zamrznitev aplikacije.
Potencialna rešitev je premik tega izvajanja v glavno nit, kar pa ima druge nezaželjene implikacije. Podobnih problemov nisem zaznal v funkcijah readString, readInt...

Primer kode prejemnika

import threading
import numpy
import time

from echolib import pyecho
import echocv
import cv2

def callbackThread(message):
    print("Callback before matread...")

    reader = pyecho.MessageReader(message)
    img = echocv.readMat(reader)

    print("Callback after read...")
    print(img.shape)

def callback(message):
    threading.Thread(target=callbackThread, args=[message]).start()

    #reader = pyecho.MessageReader(message)
    #img = echocv.readMat(reader)
    #print(img.shape)

def main():
    loop = pyecho.IOLoop()
    client = pyecho.Client()
    loop.add_handler(client)

    p0 = pyecho.Subscriber(client, "test", "numpy.ndarray", callback)
    try:
        while loop.wait(10):
            time.sleep(0.001)
    except KeyboardInterrupt:
        pass

if __name__ == '__main__':
    main()

Primer kode pošiljatelja

from echolib import pyecho
import echocv
import cv2
import time
import sys

class Demo():

    def __init__(self):
        self.loop = pyecho.IOLoop()
        self.client = pyecho.Client()
        self.loop.add_handler(self.client)

        self.dockerCommandOut = pyecho.Publisher(self.client, "test", "numpy.ndarray")
        self.loop.wait(10)

        self.count = 0

def main():

    demo = Demo()
    camera = cv2.VideoCapture(0)

    try:
        while demo.loop.wait(10):

            ret, frame = camera.read()

            writer = pyecho.MessageWriter()
            echocv.writeMat(writer, frame)
            demo.dockerCommandOut.send(writer)
            demo.count += 1

            time.sleep(1.0)
    except KeyboardInterrupt:
        pass

if __name__=='__main__':
    main()
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant