【发布时间】:2020-08-25 20:42:40
【问题描述】:
正如我在标题中提到的,我无法将 Thread object 设置为 JSON 值。该程序给了我TypeError。这是我的代码:
from threading import Thread
import json
import time
# Set dict
threads = {}
while True:
data = input('What do you want to call your Thread? ')
# Target func
def targetfunc(name):
while True:
print(f"I'm {name} Thread!")
time.sleep(3)
# Set thread
threads[data] = Thread(target = targetfunc, args = [data])
# Create threads file
with open('threads.json', 'w') as rmd:
json.dump(threads, rmd)
# Start thread
threads[data].start()
# Print inside the dict
print("INSIDE THE DICT:", threads)
此代码正在等待您输入input。您输入的输入变为Thread 名称。这是输出:
What do you want to call your Thread? love
Traceback (most recent call last):
File "C:\Users\WINDOWS 8.1\Desktop\MarthaAI\mTest\test3.py", line 23, in <modu
le>
json.dump(threads, rmd)
File "C:\Users\WINDOWS 8.1\AppData\Local\Programs\Python\Python37-32\lib\json\
__init__.py", line 179, in dump
for chunk in iterable:
File "C:\Users\WINDOWS 8.1\AppData\Local\Programs\Python\Python37-32\lib\json\
encoder.py", line 431, in _iterencode
yield from _iterencode_dict(o, _current_indent_level)
File "C:\Users\WINDOWS 8.1\AppData\Local\Programs\Python\Python37-32\lib\json\
encoder.py", line 405, in _iterencode_dict
yield from chunks
File "C:\Users\WINDOWS 8.1\AppData\Local\Programs\Python\Python37-32\lib\json\
encoder.py", line 438, in _iterencode
o = _default(o)
File "C:\Users\WINDOWS 8.1\AppData\Local\Programs\Python\Python37-32\lib\json\
encoder.py", line 179, in default
raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type Thread is not JSON serializable
如您所见,我收到了TypeError: Object of type Thread is not JSON serializable。我对这个项目的期望是这样的:
What do you want to call your Thread? love
I'm love Thread!
INSIDE THE DICT: {'love': Thread(Thread-1, started 4060)}
What do you want to call your Thread?
I'm love Thread!
I'm love Thread!
...
我该如何处理这个问题?我想将Thread object 设置为JSON 值。希望对您有所帮助。
【问题讨论】:
-
您希望它如何工作?错误是完全清楚的 - 你不能将
Thread对象序列化为 JSON(像这样。我要掩饰我的背后并假设有一些奇怪的方法来做到这一点)。真正的问题是你为什么尝试? -
# Create threads file这有什么用? -
对于你的第一个问题,我应该停止我必须做的事情,因为它没有序列化吗?对于您的第二个问题,它会创建一个字典并在其中保留
Thread name和value。 -
没有停止
Thread的功能,但我使用flag来停止它。请不要告诉我没有办法,因为总有办法做某事.. -
@roganjosh:可以序列化几乎所有内容。为什么不用线程?
标签: python arrays json multithreading dictionary