Python: решение нескольких линейных систем с использованием потоков

Я пытаюсь решить несколько линейных систем, используя python и scipy, используя потоки. Я абсолютный новичок, когда дело доходит до потоков Python. Я приложил код, который выделяет то, что я пытаюсь выполнить. Этот код работает, но время выполнения на самом деле увеличивается по мере увеличения totalThreads. Я предполагаю, что spsolve рассматривается как критический раздел и на самом деле не запускается одновременно.

У меня следующие вопросы:

  • Является ли spsolve потокобезопасным?
  • Если spsolve блокируется, есть ли способ обойти это?
  • Есть ли другой пакет линейного решателя, который лучше распараллеливает?
  • Есть ли лучший способ написать этот сегмент кода, который повысит производительность?

Я искал ответы в Интернете, но безуспешно. Возможно, я просто использую неправильные ключевые слова. Спасибо всем за помощь.

    def Worker(threadnum, totalThreads):
        for i in range(threadnum,N,totalThreads):
           x[:,i] = sparse.linalg.spsolve( A,  b[:,i] )

    threads = []
    for threadnum in range(totalThreads):
        t = threading.Thread(target=Worker, args=(threadnum, totalThreads))
        threads.append(t)
        t.start()

    for threadnum in range(totalThreads): threads[threadnum].join()
6
задан Eldila 14 March 2012 в 19:15
поделиться