1
tinyproxy 2016-08-10 00:00:28 +08:00
1. 伪代码是用来描述算法的,你这个问题是工程问题,跟算法没一毛钱关系。
2. 既然想别人帮你解决问题,提供个能复现问题的代码好么。。。就这点东西,完全看不到线程操作,也看不到函数实现,能看出什么问题就见鬼了。。。 3. 吐槽一下,你发邮件居然不用队列,直接卡住请求。。。 4. 一个建议,既然觉得是线程问题,打 log 调试吧 |
2
jimmyye 2016-08-10 01:11:39 +08:00
同楼上,建议问问题的时候描述问题的本身,而不是先自己推测为线程问题。
item 为什么会变成 model ? item_list 不应该在 save_into_data()里被修改,如果需要保持 model 实例,应该用另一个 list : item_instances = save_into_data(item_list) send_email(item_lsit) |
3
upwell 2016-08-10 11:23:23 +08:00
list 是 mutable 的, 传到 save_into_data 里面,可能被改掉了,这个流程多半都是同步的,跟线程没关系。
|
4
sigmadg 2016-08-10 16:58:17 +08:00
save_into_data 应该是用了 django 的 orm 吧, django 的 orm 存库是需要转成 model 来存的,和线程确实没关系
|
5
scott123 OP @jimmyye @tinyproxy @upwell @sigmadg 我这里指的线程是 Django 自己运行的线程,并不是我自己写线程,用伪代码是应为写的长肯定没有人会看,实际代码很多,我在更佳详细的描述一下,实际我的 list 里是一个有前台传过来的 unicode 的字典,所以使用了 eval(),在 save_to_data()里的大概是这样的 for item in item_lis : item=eval(item)然后取出每一个值赋值到参数, orm 的 model 然后写入数据库,然后 send_emai()也是差不多的代码, for item in item_lis : item=eval(item)取出值,但是没有保存的动作,调换发邮件和保存的顺序就不会出现错误。两种情况都有查看 item 的类型变化,当先保存后发邮件的时候, item 会变成, model.receiving.object,我也获得的对象的 ID ,但是无法访问。不会用 V2EX 的编辑器,比 stackoverflow 还难用。
|
6
yufpga 2016-08-11 09:35:04 +08:00
不看 save_into_data 的源码,仅凭这些描述是看不出来问题的, 此外尽量不要使用 eval, 使用 json.loads 进行反序列化.
|