Python: потоки + блокировка значительно замедляют работу моего приложения

Допустим, у меня есть функция, которая записывает в файл. У меня также есть функция, которая циклически повторяет чтение из указанного файла. У меня обе эти функции выполняются в отдельных потоках. (На самом деле я читаю / пишу в регистры через MDIO, поэтому я не могу одновременно выполнять оба потока, только один или другой, но для простоты скажем, что это файл)

Теперь, когда я запустите функцию записи изолированно, она выполняется довольно быстро. Однако когда я запускаю многопоточную систему и перед запуском получаю блокировку, кажется, что она работает очень медленно. Это потому, что второй поток (функция чтения) запрашивает блокировку? Есть ли способ обойти это?

В настоящее время я просто использую простой RLock, но открыт для любых изменений, которые могут повысить производительность.

Edit: В качестве примера я приведу простой пример того, что происходит. Поток чтения в основном всегда выполняется, но иногда отдельный поток выполняет вызов для загрузки. Если я тестирую, запустив нагрузку из командной строки, работа в потоке будет как минимум в 3 раза медленнее.

поток записи:

import usbmpc # functions I made which access dll functions for hardware, etc

def load(self, lock):
    lock.acquire()
    f = open('file.txt','r')
    data = f.readlines()
    for x in data: 
        usbmpc.write(x)
    lock.release()

поток чтения:

import usbmpc

def read(self, lock): 
    addr = START_ADDR
    while True: 
        lock.acquire()
        data = usbmpc.read(addr)
        lock.release()
        addr += 4
        if addr > BUF_SIZE: addr = START_ADDR
5
задан Shaunak Amin 24 March 2011 в 23:35
поделиться