Python:线程或异常有什么问题?

2024-09-19 23:37:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下功能:

def getSuggestengineResult(suggestengine, seed, tablename):
    table = getTable(tablename)

    for keyword_result in results[seed][suggestengine]:
        i = 0
        while True:
            try:
                allKeywords.put_item(
                    Item={
                        'keyword': keyword_result
                    }
                )
                break
            except ProvisionedThroughputExceededException as pe:
                if (i > 9):
                    addtoerrortable(keyword_result)
                    print(pe)
                    break
                sleep(1)
                i = i + 1
                print("ProvisionedThroughputExceededException in getSugestengineResult")

函数在多个线程中启动。我有这个进程,如果进程工作,函数应该在线程中准备好。否则应该再试9次。现在我的问题是: “print(“ProvisionedThroughputExceededException in GetSugestenginerResult”)”从未打印过。只是pe印刷时的例外。所以这就是我的问题?所有线程都在同一个“i”上工作吗?还是永远都不可能找到印刷品?我不知道我做错了什么


Tags: 函数in功能进程defresult线程keyword
1条回答
网友
1楼 · 发布于 2024-09-19 23:37:00

如果希望所有线程都具有相同的计数器,则必须使用特定的计数器:

from multiprocessing import Lock, Process, Value

class ThreadCounter(object):
  def __init__(self, initval=0):
      self.val = Value('i', initval)
      self.lock = Lock()

  def increment(self):
      with self.lock:
          self.val.value += 1

  def value(self):
      with self.lock:
        return self.val

然后你可以把计数器传递给你的函数

counter=ThreadCounter(0)
def getSuggestengineResult(suggestengine, seed, tablename,counter):
    ...
    except ProvisionedThroughputExceededException as pe:
            if (counter.value() > 9):
                ...
            counter.increment()
            ...

此计数器将与其他线程共享

相关问题 更多 >