2016-02-07 20 views
6

Tôi có python-memcached (1.57) và django-cần tây (3.1.17), cần tây (3.1.20) và python 3.5. Tôi luôn luôn nhận được báo lỗi dưới đây khi tôi cố gắng thực hiện http://docs.celeryproject.org/en/latest/tutorials/task-cookbook.html#ensuring-a-task-is-only-executed-one-at-a-timemột đối tượng giống như byte là bắt buộc, không phải 'str' - lỗi

Task tasks.live_task[a2ed1faf-0fce-4855-a206-40f2fbdae1a8] raised unexpected: TypeError("a bytes-like object is required, not 'str'",) 
Traceback (most recent call last): 
File "/app/current/venv/lib/python3.5/site-packages/celery/app/trace.py", line 240, in trace_task 
R = retval = fun(*args, **kwargs) 
File "/app/current/venv/lib/python3.5/site-packages/celery/app/trace.py", line 438, in __protected_call__ 
return self.run(*args, **kwargs) 
File "/app/current/src/helps.py", line 62, in wrapper 
if acquire(): 
File "/app/current/src/helps.py", line 57, in acquire 
return cache.add(id, "true", time_out) 
File "/app/current/venv/lib/python3.5/site-packages/django/core/cache/backends/memcached.py", line 80, in add 
return self._cache.add(key, value, self.get_backend_timeout(timeout)) 
File "/app/current/venv/lib/python3.5/site-packages/memcache.py", line 633, in add 
return self._set("add", key, val, time, min_compress_len, noreply) 
File "/app/current/venv/lib/python3.5/site-packages/memcache.py", line 983, in _set 
server, key = self._get_server(key) 
File "/app/dashboard/current/venv/lib/python3.5/site-packages/memcache.py", line 413, in _get_server 
serverhash = serverHashFunction(str(serverhash) + str(i)) 
File "/app/current/venv/lib/python3.5/site-packages/memcache.py", line 65, in cmemcache_hash 
(((binascii.crc32(key) & 0xffffffff) 
TypeError: a bytes-like object is required, not 'str' 
+1

Lỗi này rất có thể liên quan đến phiên bản python của bạn. Hãy thử chuyển đổi thành byte bằng cách sử dụng 'byte (string, encoding =" UTF-8 ")'. –

+1

Thử sử dụng 'python3-memcached' –

+0

@DerekKwok' python3-memcached> = 1.51' hoặc được neo vào 1.51 đặc biệt quan trọng? – tdelaney

Trả lời

5

python-memchached không được hỗ trợ trên python 3.5 Nếu bạn đã sử dụng python-memchached, Các lệnh sau đây sẽ giúp bạn.

pip uninstall python-memcached 
pip install python3-memcached 
+1

thực sự đó là một cái bẫy. python3-memcached không hoạt động nhưng nó bị gián đoạn và python-memcached chính thức chỉ hoạt động với dữ liệu được mã hóa utf-8. Giả sử có một sửa chữa cho nó, nhưng đối với tôi nó vẫn thổi lên: https://github.com/linsomniac/python-memcached/issues/80 –

+0

Đúng vậy. python3-memcached không được chấp nhận. Nó chỉ là một cổng tương thích py3 của python-memcached mà kể từ đó đã thêm py23. –

Các vấn đề liên quan