代码适用于本地,但无法在服务器中运行! 我有一个vps(ubuntu):我使用的是uWSGI。
我有一个管理在线用户的课程。
from django.core.cache import cache
class OnlineUser(object):
def __init__(self, key):
self.key = key
self.human_env = Environment(PROBABILITY_ENV)
self.robot_env = Environment(PROBABILITY_ENV)
human = Human()
robot = Agent(configure[COST_MOVEMENT][0], configure[COST_MOVEMENT][1], configure[COST_MOVEMENT][2])
self.robot_env.agent = robot
self.human_env.agent = human
f_learning = 'agent_p%.2f_d%.2f_l%.2f_e%.2f_c%.2d.ai' % (
PROBABILITY_ENV, configure[COST_MOVEMENT][0], configure[COST_MOVEMENT][1], configure[COST_MOVEMENT][2],
COST_MOVEMENT)
f_learning = os.path.join(PROJECT_ROOT, 'chahchi', f_learning)
try:
with open(f_learning, 'rb') as agent_:
robot.policy = pickle_load(agent_)
except:
self.robot_env.learn()
with open(f_learning, 'wb') as output:
pickle_dump(robot.policy, output)
self.update_cache()
def next_round(self):
self.human_env.next_round()
self.robot_env.next_round()
def update_cache(self):
cache.set(self.key, self)
def __eq__(self, other):
return self.key == other.key
def chahchi(request):
request.session['chahchi'] = True
user = OnlineUser(request.session.session_key)
ground = [[0 for j in xrange(8)] for i in xrange(8)]
for i, j, value in State.points:
ground[i][j] = value
for i, j, in Environment.wells:
ground[i][j] = -200
robot = [0, 7]
return render_to_response('chahchi/chahchi.html', {
'ground': ground,
'robot': robot
}, RequestContext(request))
@csrf_exempt
def chahchi_ajax(request):
user = cache.get(request.session.session_key)
if not request.session['chahchi']:
return HttpResponse(status=404)
human_action = request.POST['action']
robot_env, human_env = user.robot_env, user.human_env
if not robot_env.test_info['finish']:
r_action_name, r_test_info = robot_env.next_step()
else:
r_action_name = None
r_test_info = robot_env.test_info
if not human_env.test_info['finish']:
h_action_name, h_test_info = human_env.next_step(action=human_action)
else:
h_action_name = None
h_test_info = human_env.test_info
if robot_env.test_info['finish'] and human_env.test_info['finish']:
user.next_round()
user.update_cache()
else:
user.robot_env = robot_env
user.human_env = human_env
user.update_cache()
response_data = {
'robot': {
'test_info': r_test_info,
'action': r_action_name,
},
'human': {
'test_info': h_test_info,
'action': h_action_name,
},
'game': {
'counter_episode': 0,
'finish': False
}
}
return HttpResponse(json_dumps(response_data), content_type='application/json')
settings.py
MIDDLEWARE_CLASSES = (
"mezzanine.core.middleware.UpdateCacheMiddleware",
'django.contrib.sessions.middleware.SessionMiddleware',
# Uncomment if using internationalisation or localisation
# 'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
"mezzanine.core.request.CurrentRequestMiddleware",
"mezzanine.core.middleware.RedirectFallbackMiddleware",
"mezzanine.core.middleware.TemplateForDeviceMiddleware",
"mezzanine.core.middleware.TemplateForHostMiddleware",
"mezzanine.core.middleware.AdminLoginInterfaceSelectorMiddleware",
"mezzanine.core.middleware.SitePermissionMiddleware",
# Uncomment the following if using any of the SSL settings:
# "mezzanine.core.middleware.SSLRedirectMiddleware",
"mezzanine.pages.middleware.PageMiddleware",
"mezzanine.core.middleware.FetchFromCacheMiddleware",)
local_settings.py
我测试了这个
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': '/var/tmp/django_cache',
}
}
和
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
但在服务器中无法正常工作。
在调用my_view_ajax后首先调用函数my_view。
当调用my_view_ajax时,我收到错误500,
错误:
'NoneType' object has no attribute 'robot_env'