當前位置: 首頁>>代碼示例>>Python>>正文


Python Array.get_lock方法代碼示例

本文整理匯總了Python中multiprocessing.Array.get_lock方法的典型用法代碼示例。如果您正苦於以下問題:Python Array.get_lock方法的具體用法?Python Array.get_lock怎麽用?Python Array.get_lock使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在multiprocessing.Array的用法示例。


在下文中一共展示了Array.get_lock方法的5個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。

示例1: update_c

# 需要導入模塊: from multiprocessing import Array [as 別名]
# 或者: from multiprocessing.Array import get_lock [as 別名]
c2 = pipecl2.recv() #Blocking
update_c(c1.ravel(),c2.ravel()) #########

print "Running main loop..."
while runflag:
    #print uflag1.value
    #print uflag2.value
    dat1 = uflag1.value
    dat2 = uflag2.value
    frame = vs.read() #for testing
    #datrecv1 = pipeul1.recv() #Blocking
    #datrecv2 = pipeul2.recv() #Blocking
    #if datrecv1[0] and datrecv2[0]:
    if (dat1 == 2) and (dat2 ==2):
        #pos3d =  calc3d(datrecv2[2].ravel(),datrecv1[2].ravel()) ########
        with uarray1.get_lock():
            arr1 = np.frombuffer(uarray1.get_obj())
        with uarray2.get_lock():
            arr2 = np.frombuffer(uarray2.get_obj())
        pos3d =  calc3d(arr1,arr2)
        #print np.asarray(pos3d)
        imgpts, jac = cv2.projectPoints(np.float32([np.asarray(pos3d)]).reshape(-1,3), rvecs, tvecs, mtx, dist)
        cv2.rectangle(frame,(int(imgpts[0,0,0]) - 2,int(imgpts[0,0,1]) - 2),(int(imgpts[0,0,0]) + 2 ,int(imgpts[0,0,1]) + 2),(255,0,0),1)
    #elif not datrecv1[1] or not datrecv2[1]:
    elif (dat1 == 0) or (dat2 ==0):
        runflag = False
    cv2.imshow('frame',frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
    	break

print "Waiting for both processes to stop..."
開發者ID:RoshanPasupathy,項目名稱:3d_localisation,代碼行數:33,代碼來源:mptrecvmaintest.py

示例2: RingBuffer

# 需要導入模塊: from multiprocessing import Array [as 別名]
# 或者: from multiprocessing.Array import get_lock [as 別名]
class RingBuffer(object):
    """
    A RingBuffer containing complex values.
    """
    def __init__(self, size: int):
        self.__data = Array("f", 2*size)
        self.size = size
        self.__current_index = Value("L", 0)

    @property
    def current_index(self):
        return self.__current_index.value

    @current_index.setter
    def current_index(self, value):
        self.__current_index.value = value

    @property
    def is_empty(self) -> bool:
        return self.current_index == 0

    @property
    def space_left(self):
        return self.size - self.current_index

    @property
    def data(self):
        return np.frombuffer(self.__data.get_obj(), dtype=np.complex64)

    def __getitem__(self, index):
        return self.data[index]

    def __repr__(self):
        return "RingBuffer " + str(self.data)

    def __increase_current_index_by(self, n: int):
        self.current_index += n
        if self.current_index > self.size:
            self.current_index = self.size

    def clear(self):
        self.current_index = 0

    def will_fit(self, number_values: int) -> bool:
        return number_values <= self.space_left

    def push(self, values: np.ndarray):
        """
        Push values to buffer. If buffer can't store all values a ValueError is raised
        :param values: 
        :return: 
        """
        n = len(values)

        with self.__data.get_lock():
            data = np.frombuffer(self.__data.get_obj(), dtype=np.complex64)
            data[self.current_index:self.current_index+n] = values

        self.__increase_current_index_by(n)

    def pop(self, number: int) -> np.ndarray:
        """
        Pop number of elements. If there are not enough elements, all remaining elements are returned and the
        buffer is cleared afterwards. If buffer is empty, an empty numpy array is returned.
        """
        if number > self.current_index:
            number = self.current_index

        with self.__data.get_lock():
            self.current_index -= number
            result = np.copy(self.data[0:number])
            data = np.frombuffer(self.__data.get_obj(), dtype=np.complex64)
            data[:] = np.roll(data, -number)

        return result
開發者ID:Cyber-Forensic,項目名稱:urh,代碼行數:77,代碼來源:RingBuffer.py

示例3: acquire_parallel

# 需要導入模塊: from multiprocessing import Array [as 別名]
# 或者: from multiprocessing.Array import get_lock [as 別名]
    def acquire_parallel(self, worker_cls, worker_args, result_shape, plot=False):
        """
        :param worker: Function which the subordinate threads execute as their target
        :param proc_fun: Function used by the subordinate threads to process their buffers
        :param result_shape: Shape of the buffer which is the result of the entire acquisition.
        """
        from multiprocessing import Array, Value, Event
        from slab.plotting import ScriptPlotter
        import time

        acquire_buffer_time = self.samples_per_buffer / (self.samples_per_second)
        print('Acquire buffer time %.2e' % acquire_buffer_time)
        print('Inter-buffer time %.2e' % self.seconds_per_buffer)
        print('Duty Cycle', acquire_buffer_time / self.seconds_per_buffer)

        try:
            # I don't know why this needs to happen again?
            channel = 0
            if self.ch1_enabled:
                channel |= 1
            if self.ch2_enabled:
                channel |= 2
            pretriggers = C.c_long(0)
            flags = U32(513)
            ret = self.Az.AlazarBeforeAsyncRead(self.handle,U32(channel),pretriggers,
                                       U32(self.config.samplesPerRecord), 
                                       U32(self.config.recordsPerBuffer),
                                       U32(self.config.recordsPerAcquisition),
                                       flags)            
            
            # Initialize buffers
            buffers = [Array(U8, self.bytes_per_buffer) for _ in range(self.buffer_count)]
            for b in buffers:
                ret = self.Az.AlazarPostAsyncBuffer(self.handle, b.get_obj(), U32(self.bytes_per_buffer))
                self.assert_az(ret, 0, 'Initial Post Buffer')

            res_buffer = Array(C.c_longdouble, result_shape)

            # Initialize threads
            bufs_merged = Value(U32, 1)
            buf_ready_events = [Event() for _ in range(self.buffer_count)]
            buf_post_events = [Event() for _ in range(self.buffer_count)]
            workers = [worker_cls(*(worker_args + (self.config, b, bre, bpe, res_buffer, bufs_merged)))
                       for b, bre, bpe in zip(buffers, buf_ready_events, buf_post_events)]

            for w in workers:
                w.start()
            time.sleep(1)

            import atexit
            atexit.register(lambda: [w.terminate() for w in workers])


            # Initialize things used during capture
            if plot:
                plotter = ScriptPlotter()
                plotter.init_plot('Data', rank=1, accum=False)
            buffers_acquired, buffers_completed, plot_count = 0, 0, 0
            start_time = time.time()

            # Begin capture
            ret = self.Az.AlazarStartCapture(self.handle)
            self.assert_az(ret, 0, "Start Capture")
            unready_count = 0
            while buffers_completed < self.buffers_per_acquisition:

                # Post all completed buffers
                while buf_post_events[buffers_completed % self.buffer_count].is_set():
                    buf_post_events[buffers_completed % self.buffer_count].clear()
                    buf = buffers[buffers_completed % self.buffer_count]
                    with buf.get_lock():
                        ret = self.Az.AlazarPostAsyncBuffer(self.handle, buf.get_obj(), U32(self.bytes_per_buffer))
                        self.assert_az(ret, buffers_acquired, 'Post Buffer')
                    buffers_completed += 1

                    # Current buffer rotates in a ring
                buf_idx = buffers_acquired % self.buffer_count
                buf = buffers[buf_idx]

                # Pull data to buffer
                with buf.get_lock():
                    ret = self.Az.AlazarWaitAsyncBufferComplete(self.handle, buf.get_obj(), U32(self.timeout))
                    if ret == 573:
                        unready_count += 1
                        continue # BufferNotReady, go back and try to post some buffers.
                    else:
                        self.assert_az(ret, buffers_acquired, 'Wait Buffer Complete')

                buffers_acquired += 1

                # Tell worker thread to begin processing
                buf_ready_events[buf_idx].set()

                # If a second has elapsed, replot the avg_buffer
                if (time.time() - start_time) / self.seconds_per_plot > plot_count:
                    if plot:
                        with res_buffer.get_lock():
                            plotter.msg(buffers_acquired, buffers_completed, bufs_merged.value)
                            plotter.plot(np.frombuffer(res_buffer.get_obj()), 'Data')
                        plot_count += 1
#.........這裏部分代碼省略.........
開發者ID:SchusterLab,項目名稱:slab,代碼行數:103,代碼來源:alazar_parallel.py

示例4: RingBuffer

# 需要導入模塊: from multiprocessing import Array [as 別名]
# 或者: from multiprocessing.Array import get_lock [as 別名]
class RingBuffer(object):
    """
    A RingBuffer containing complex values.
    """
    def __init__(self, size: int):
        self.__data = Array("f", 2*size)
        self.size = size
        self.__left_index = Value("L", 0)
        self.__right_index = Value("L", 0)
        self.__length = Value("L", 0)

    def __len__(self):
        return self.__length.value

    @property
    def left_index(self):
        return self.__left_index.value

    @left_index.setter
    def left_index(self, value):
        self.__left_index.value = value % self.size

    @property
    def right_index(self):
        return self.__right_index.value

    @right_index.setter
    def right_index(self, value):
        self.__right_index.value = value % self.size

    @property
    def is_empty(self) -> bool:
        return len(self) == 0

    @property
    def space_left(self):
        return self.size - len(self)

    @property
    def data(self):
        return np.frombuffer(self.__data.get_obj(), dtype=np.complex64)

    @property
    def view_data(self):
        """
        Get a representation of the ring buffer for plotting. This is expensive, so it should only be used in frontend
        :return:
        """
        left, right = self.left_index, self.left_index + len(self)
        if left > right:
            left, right = right, left

        data = np.frombuffer(self.__data.get_obj(), dtype=np.complex64)
        return np.concatenate((data[left:right], data[right:], data[:left]))

    def clear(self):
        self.left_index = 0
        self.right_index = 0

    def will_fit(self, number_values: int) -> bool:
        return number_values <= self.space_left

    def push(self, values: np.ndarray):
        """
        Push values to buffer. If buffer can't store all values a ValueError is raised
        """
        n = len(values)
        if len(self) + n > self.size:
            raise ValueError("Too much data to push to RingBuffer")

        slide_1 = np.s_[self.right_index:min(self.right_index + n, self.size)]
        slide_2 = np.s_[:max(self.right_index + n - self.size, 0)]
        with self.__data.get_lock():
            data = np.frombuffer(self.__data.get_obj(), dtype=np.complex64)
            data[slide_1] = values[:slide_1.stop - slide_1.start]
            data[slide_2] = values[slide_1.stop - slide_1.start:]
            self.right_index += n

        self.__length.value += n

    def pop(self, number: int, ensure_even_length=False):
        """
        Pop number of elements. If there are not enough elements, all remaining elements are returned and the
        buffer is cleared afterwards. If buffer is empty, an empty numpy array is returned.

        If number is -1 (or any other value below zero) than complete buffer is returned
        """
        if ensure_even_length:
            number -= number % 2

        if len(self) == 0 or number == 0:
            return np.array([], dtype=np.complex64)

        if number < 0:
            # take everything
            number = len(self)
        else:
            number = min(number, len(self))

        with self.__data.get_lock():
#.........這裏部分代碼省略.........
開發者ID:jopohl,項目名稱:urh,代碼行數:103,代碼來源:RingBuffer.py

示例5: Screen

# 需要導入模塊: from multiprocessing import Array [as 別名]
# 或者: from multiprocessing.Array import get_lock [as 別名]
class Screen(Device):
    def __init__(self, nomenclature="", width=0., height=0., screen_width=0., screen_height=0.):

        Device.__init__(self, nomenclature, width, height)
        self.screen_width = screen_width
        self.screen_height = screen_height
        self.count = Array('i', 10000)

    def __repr__(self):

        r = str(self) + "("
        r += "width=" + str(self.width) + "m, "
        r += "height=" + str(self.height) + "m, "
        r += "length=" + str(self.length) + "m, "
        r += "screen_width=" + str(self.screen_width) + "m, "
        r += "screen_height=" + str(self.screen_height) + "m )"
        return r

    def transport(self, particle):

        if not self.is_particle_lost(particle):

            self.collect(particle)
            if self.next:
                return self.next.transport(particle)
            else:
                return particle
        else:
            return None

    def collect(self, particle):

        half_screen_width = 0.5 * self.screen_width
        half_screen_height = 0.5 * self.screen_height
        cell_width = 0.01 * self.screen_width
        cell_height = 0.01 * self.screen_height

        if half_screen_width > particle.x > -half_screen_width and half_screen_height > particle.y > -half_screen_height:
            x = int((particle.x + half_screen_width) / cell_width)
            y = int((particle.y + half_screen_height) / cell_height)
            with self.count.get_lock():
                self.count[100 * x + y] += 1

    def num_of_particles(self):
        c = 0
        for i in self.count:
            c += i
        return c

    def reset(self):

        self.count = Array('i', 10000)
        if self.next:
            self.next.reset()

    def show(self):

        x = []
        y = []
        z = []

        for i in range(100):
            for j in range(100):
                x.append(float(i))
                y.append(float(j))
                z.append(float(self.count[100 * i + j]))

        plt.hist2d(x, y, bins=100, weights=z)
        plt.colorbar()
        plt.show()
開發者ID:StephanII,項目名稱:accelerator-toolkit,代碼行數:72,代碼來源:diagnostic.py


注:本文中的multiprocessing.Array.get_lock方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。