我正在尝试在python上启动一个线程,该线程需要处理来自服务器的更新。
然后,我尝试使用双向流在上面通过GRPC提供的服务上发送此数据。
因此,想法是,当事件到达时,线程将在数组上推送新事件。这样,通过使用迭代器,GRPC服务将看到在数组中推送了某些内容,并将其在双向流上进行流处理。
为了实现此目标,我需要将参数作为参数传递给将由新线程处理的数组。
这是代码:
thread = Thread(target=handler_subscriptions , args= {address, endpoint , path1 ,event_array})
event_array是我需要传递的数组。 我收到此运行时错误:
TypeError: unhashable type: 'list'
有人可以向我解释原因,以及如何绕过此问题吗?
答案 0 :(得分:1)
export const COLORS = {
red: #E90716,
}
的{{1}}参数包含可调用args
的位置参数。因此,它必须是订购集合。您不能使用集合,因为参数将没有保证的顺序使用。
使用元组代替:
Thread
尽管列表也可以。
您看到的错误消息的确切原因是,尝试集中的元素之一不是可哈希类型。这是偶然的,因为它引发了一个异常,导致您要解决此问题(因为集合的元素必须是可哈希的),但是将其更改为可哈希的类型并不是解决方案,尽管它可能碰巧可以解决某些问题。偶然出现集合中的元素的时间。
答案 1 :(得分:0)
这与线程无关,您试图创建一个包含可变类型(列表)的集合。您可以通过两种方式解决此问题。
此解决方案可以使传递的参数不按顺序传递给目标中调用的函数。仅当您有一个参数时才使用它。 第二个更好。 您可以使用元组而不是列表(元组是不可变的,因此是可哈希的):
thread = Thread(target=handler_subscriptions, args= {address, endpoint, path1, tuple(event_array}))
或者您不能使用一组。 documentation建议始终使用元组而不是集合:
thread = Thread(target=handler_subscriptions, args= (address, endpoint, path1, event_array))