aardio 多线程问题优化

废话不多说,直接开干!
在这里插入图片描述

今天遇到多线问题,还在搞一脸懵逼
thread.invoke
thread.command
thread.works
thread.manage
罗列这些下面我们介绍invoke

这个模式比较快

for(xxx){
 invoke(
 	function(){
		for(){
		}
	}
 )
}

之前一直用这个模式,速度老是不快,感觉不是多线程

invoke(
	function(){
		for(){
		}
	}
)

直接上代码

import win.ui;
import string;
import inet.whttp;
import console;
import fsys.file;
import fsys.dlg;
import thread.works
import io;
import com;
import com.excel;


import console;
import mysql.client;
//多线程管理器
import thread.manage

//创建线程管理器
manage = thread.manage(3)
//console.log("正在连接数据库服务器...");
thread.invoke( function()
        while(! thread.get("db4free.net:end")){
         io.stdout.write(">");sleep(100);
    }  
)

var dbMysql,err = mysql.client(
    server = "127.0.0.1"; //数据库服务器,可省略默认为localhost
    uid = "sql_card_mm0527_";//用户名,可省略默认为root
    pwd = "PtsfimRfp7xw3L84";  
);

thread.set("db4free.net:end",true)
//console.clearScreen ();
if(!dbMysql){
    console.log("连接数据库失败",err);
    console.pause();
    return;
}

//选择数据库
dbMysql.selectDb("sql_card_mm0527_")
/*DSG{{*/
mainForm = win.form(text="小鸡京东助手 for ";right=799;bottom=599)
mainForm.add(
btnInsert={cls="button";text="导入";left=600;top=24;right=704;bottom=56;z=4};
btn_select_file={cls="button";text="选择文件";left=464;top=24;right=584;bottom=56;z=7};
button={cls="button";text="获取数据";left=458;top=139;right=538;bottom=171;z=1};
button2={cls="button";text="添加关键词";left=248;top=137;right=352;bottom=169;z=8};
button3={cls="button";text="导出";left=597;top=138;right=677;bottom=170;z=9};
button4={cls="button";text="确定";left=458;top=86;right=538;bottom=115;z=13};
button5={cls="button";text="清除";left=596;top=84;right=679;bottom=117;z=14};
combobox={cls="combobox";left=69;top=90;right=172;bottom=116;edge=1;hscroll=1;items={};mode="dropdownlist";vscroll=1;z=10};
combobox2={cls="combobox";left=187;top=89;right=291;bottom=115;edge=1;hscroll=1;items={};mode="dropdownlist";vscroll=1;z=11};
combobox3={cls="combobox";left=297;top=89;right=404;bottom=115;edge=1;hscroll=1;items={};mode="dropdownlist";vscroll=1;z=12};


edit={cls="edit";text="螺蛳粉";left=88;top=139;right=179;bottom=167;edge=1;multiline=1;z=3};
edit2={cls="edit";left=16;top=34;right=424;bottom=66;edge=1;z=5};
listview={cls="listview";left=104;top=224;right=640;bottom=504;bgcolor=12632256;border=1;edge=1;vscroll=1;z=2};
txt_log={cls="button";text="会员到期时间:0天";left=10;top=1;right=150;bottom=26;z=6}
)
/*}}*/

mainForm.button5.oncommand = function(id,event){
	mainForm.listview.clear();
	
	
}
mainForm.listview.insertColumn("序号",50) 
mainForm.listview.insertColumn("关键词",100) 
mainForm.listview.insertColumn("数量",100)
mainForm.listview.insertColumn("第一评论",100)
mainForm.listview.insertColumn("第二评论",100)
mainForm.listview.insertColumn("第三评论",100)
//mainForm.listview.insertColumn("价格1",100) 
var num=0;
var filepath;

function addItem(str){
	num++;
	mainForm.listview.addItem( { 
			text={num;str;"0"} 
		})
}
function getResult(kwd){
	 import inet.whttp
	import win
	import console
	var http = inet.whttp("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0");
var url,s
var count=mainForm.listview.count;//拿到listview数据条数
count=2;
 for(i=1;count;1){
        //test1=mainForm.listview.getItemText(i,1);//拿到测试1 这列数据
        kwd=mainForm.listview.getItemText(i,2);//拿到关键词 这列数据  
        url ='https://search.jd.com/Search?keyword='+kwd+'&enc=utf-8&wq='+kwd;
        //url='https://search.jd.com/Search?keyword='+kwd+'&enc=utf-8&wtype=1&click=1&qrst=1&rt=1&stop=1&vt=2&wq='++kwd; 
        s = http.get(url); 
		i2,j2 = string.find(s ,"在京东找到了");
		substr = string.sub(s,i2,i2+50)
		//console.log(i,j,substr,"件"++kwd++"的类")
		i2,j2,v = string.find(substr ,"(\d+)");
        //mainForm.listview.setItemText(kwd++v,i,3)
        mainForm.listview.setItemText(string.fromto(v,936,65001),i,3)
        csv++= kwd+','++v+'\r\n'; //累加数据到csv   
         
    }
}
var obj = {
	getComments=function (mainForm,i,product_ids){
    	//io.open();//打开控制台窗口
		thread.invoke( 
		function(mainForm,i,product_ids){
			
			import console;
			import inet.whttp
			import win	
		var http = inet.whttp("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0");
		var url,json
		for name,product_id in product_ids{
				url='https://club.jd.com/comment/productCommentSummaries.action?referenceIds='++product_id; 
				json = http.get(url); 
				var tab  = web.json.parse(json);
				var num_s = tab.CommentsCount[1].CommentCountStr;
				sleep(500)
				mainForm.listview.setItemText( string.fromto(num_s,936,65001),i,3+name)
		
		}
		
		},mainForm,i,product_ids
		)
	}
}

function enableDpiScaling(kwd,obj){

}

function getNumber(kwd,obj){

 
			 
			import console;
			//console.log("线程在执行",thread.getId() )
		import inet.whttp
		import win	
		var csv="关键词,数量"+'\r\n'
		var useagents={
		"Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3; rv:11.0) like Gecko";
		"Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/5.0"
    	}
		useagents[5]="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0";
		useagents[6]="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0";
		useagents[3]="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0";
		useagents[4]="Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0";
	
		//var http = inet.whttp(useagents[ran]);
		var url,s,http,ran
		var count=mainForm.listview.count;//拿到listview数据条数
		//count=2;
		import fsys.dlg;
		import fsys.file;
     	var filePath=fsys.getCurDir();//获取你操作的路径
      	//string.save(filePath+"/"+"test"+'.csv',csv)
      	outfile=fsys.file(filePath,"a")
       	var nu = 0
 		for(i=1;count;1){
 			nu+=1;
 			 
				
			thread.invoke( 
				function(mainForm,obj,nu){
					import console;
					
					import inet.whttp
					import win	
					var useagents={
					"Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3; rv:11.0) like Gecko";
					"Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/5.0"
					}
					useagents[5]="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0";
					useagents[6]="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0";
					useagents[3]="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0";
					useagents[4]="Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0";

					
					ran = math.random(1, #useagents); 
					http = inet.whttp(useagents[ran]);
					 
					kwd=mainForm.listview.getItemText(nu,2);//拿到关键词 这列数据  
					url ='https://search.jd.com/Search?keyword='+kwd+'&enc=utf-8&wq='+kwd;
					s = http.get(url); 
					sleep(500)
					i2,j2 = string.find(s ,"在京东找到了");
					if(i2 == null){
					i2 = '1100';
					}
					substr = string.sub(s,i2,i2+50)
					if(i2 == null){
					i2 = '1100';
					}
					i2,j2,v = string.find(substr ,"(\d+)");
					if(v == null){
					v = 0
					}


        			
					mainForm.listview.setItemText(v,nu,3)
					//outfile.write( kwd+','++33+'\r\n')
					//csv++= kwd+','++v+'\r\n'; //累加数据到csv   
					if(tonumber(v)>2){//如果有前三,找出前三
					import string.xml;
        			var htmlDoc = string.xml( s )
        			
        			var J_goodsList= htmlDoc.getEle("J_goodsList")[1][1].queryEles( tagName = "a")[1].href;
       				if(htmlDoc.getEle("J_goodsList")[1][2] !=null){
       			
       					var J_goodsList2= htmlDoc.getEle("J_goodsList")[1][2].queryEles( tagName = "a")[1].href;
       				}else{
            				J_goodsList2 = 0;
       				}
       				if(htmlDoc.getEle("J_goodsList")[1][3] !=null){
         			
       					var J_goodsList3= htmlDoc.getEle("J_goodsList")[1][3].queryEles( tagName = "a")[1].href;
       				}else{
        				
           				J_goodsList3 = 0;
       				}
       				if(J_goodsList2==null){
           				J_goodsList2 = 0;
       				}
        			if(J_goodsList3==null){
           					J_goodsList3 = 0;
       				}
        			var J_goodsLists={ J_goodsList;J_goodsList2;J_goodsList3 }
        			
					i2,j2,product_id = string.find(J_goodsList ,"(\d+)");
					i2,j2,product_id2 = string.find(J_goodsList2 ,"(\d+)");
					i2,j2,product_id3 = string.find(J_goodsList3 ,"(\d+)");
					var product_ids={product_id;product_id2;product_id3}
					
       				obj.getComments(mainForm,nu,product_ids);
          		
        		}



				 
        		sleep(500)
				},mainForm,obj,nu
				 
			);
 			
			
        		
         	
    	}

    
 
}

var csv="关键词,数量,第一评论,第二评论,第三评论"+'\r\n'

mainForm.btn_select_file.oncommand = function(id,event){
	filepath = fsys.dlg.open()//打开文件夹选取窗口,并返回所选择的文件夹的路径
    mainForm.edit2.text=filepath
}

mainForm.btnInsert.oncommand = function(id,event){
    
	//mainForm.listview.setItemText("444",1,1)
	//path="C:\Users\Administrator\Desktop\book\keyword.txt";
	fullpath =assert( io.exist( filepath ) ,"文件不存在" )
    //var excel = com.excel( true );
	//var book = excel.WorkBooks.Open(fullpath);
	//var sheet = excel.WorkSheets(1);
		
    tempfile = io.open(fullpath)
   
	line = tempfile.read();//读取下一行
	//console.log(line)

    //console.log(fullpath)
    var nu = 0;
	while( line ) {	
	nu ++;	
    
   	bb=string.fromto(line,936,65001);
   	
   	ex = string.split(bb,",");
 //console.log(ex[1])
   	//console.log(table.unpack(ex))
   	//io.print(table.unpack(ex));
   	
    var box = {p1=ex[2];p2=ex[3];p3=ex[4];key=ex[1]};

	
   	if(ex[2] !='' &&ex[2]!='一级类目'){
   		addCombobox(ex[2]);
   		if(ex[3] !='' &&ex[3]!='二级类目'){
   			addCombobox2(ex[3]);
   			if(ex[4] != ''&&ex[4]!='三级类目'){
   	 			addCombobox3(ex[4]);
   			}
   		}
   		
   	}
  
   	

     	num++;
		mainForm.listview.addItem( { 
			text={num;ex[1];"0"} 
		})
	
	
	
	
    	line = tempfile.read();//读取下一行
	}

    
}
mainForm.button.oncommand = function(id,event){
    getNumber(1,obj)

}
mainForm.button2.oncommand = function(id,event){
     
    addItem(mainForm.edit.text)
}

mainForm.button3.oncommand = function(id,event){
    now_time = "京东商品数"+tonumber( time(time.now(),"%Y%m/%d %H:%M:%S") );
    var count=mainForm.listview.count;//拿到listview数据条数
    var filePath=fsys.getCurDir();//获取你操作的路径
	outfile=fsys.file(filePath+"/"++now_time++'.csv',"a")
   	var line = 0;
    for(i=1;count;1){
        line+=1
        kwd=mainForm.listview.getItemText(line,2);//拿到关键词 这列数据  
        num=mainForm.listview.getItemText(line,3);//拿到数量 这列数据 
		com1 = mainForm.listview.getItemText(line,4);//拿到评论1 这列数据
		com2 = mainForm.listview.getItemText(line,5);//拿到评论2 这列数据
		com3 = mainForm.listview.getItemText(line,6);//拿到评论3 这列数据
        //console.log(kwd,num,com1,com2,com3)
		
		
		outfile.write( kwd+','++num++tostring(com1)++tostring(com2)++tostring(com3)++'\r\n')
		csv++= kwd+','++num++','++tostring(com1)+','++tostring(com2)+','++tostring(com3)++'\r\n'; //累加数据到csv   
		
		
    }
	if(filePath){
		string.save(filePath+"/"++now_time++'.csv',csv);	
		win.msgbox("导出到"++filePath++now_time++'.csv');
	}
	


}

mainForm.combobox.oncommand = function(id,event){
	//mainForm.combobox.clear();
  	var result = dbMysql.query("SELECT level1 FROM `cmf_role1` where 1 limit 1,7000");
		for  level1 in result.each(){
       			mainForm.combobox.add(level1)
       			
    		}
		mainForm.combobox2.clear();
	
}
mainForm.combobox2.oncommand = function(id,event){

	
	datas = mainForm.combobox.text;
	mainForm.combobox3.clear();
   	var result = dbMysql.query("SELECT level2 FROM `cmf_role1` where level1='"+datas+"' limit 1,7000");
		for  level2 in result.each(){
       			mainForm.combobox2.add(level2)
       			
    		}
	
}
mainForm.combobox3.oncommand = function(id,event){
		
		datas2 = mainForm.combobox2.text;
		
   		var result = dbMysql.query("SELECT level3 FROM `cmf_role1` where level2='"+datas2+"' limit 1,7000");
		for  level3 in result.each(){
       			mainForm.combobox3.add(level3)
    		}
  
	
}






mainForm.button4.oncommand = function(id,event){
	mainForm.listview.clear();
	datas = mainForm.combobox.text;
	
	datas2 = mainForm.combobox2.text;
	datas3 = mainForm.combobox3.text;
	if(datas !="请选择"){
			if(datas !="请选择"&&datas2!="请选择"&&datas3!="请选择"&&datas2!=""&&datas3!=""){
			//console.log(123)
		
			//查询数据并返回记录集
    		var result = dbMysql.query("SELECT  name FROM `cmf_role1` where level1='"+datas+"' and level2='"+datas2+"' and level3='"+datas3+"'");
		
		
   				for  name in result.each(){
       					mainForm.listview.addItem( { 
							text={num;name;"0"} 
						})
    				}
    			return 
		
			}
			if(datas !="请选择"&&datas2!="请选择"&&datas2!=""){
			
			//console.log(12)
				var result = dbMysql.query("SELECT  name FROM `cmf_role1` where level1='"+datas+"' and level2='"+datas2+"'");
				for  name in result.each(){
       					mainForm.listview.addItem( { 
							text={num;name;"0"} 
						})
    				}
    		return
			
			}

			var result = dbMysql.query("SELECT name FROM `cmf_role1` where level1='"+datas+"'");
			//console.log(11)
			for  name in result.each(){
       				mainForm.listview.addItem( { 
						text={num;name;"0"} 
					})
    			}
	
	}
	 
	
}





function addCombobox(obj){
  
	mainForm.combobox.add(obj);
}
function addCombobox2(obj){
	mainForm.combobox2.add(obj);
}
function addCombobox3(obj){
	mainForm.combobox3.add(obj);
}
//默认显示项设置
mainForm.combobox.add("请选择")

mainForm.combobox.selectString("请选择")//查找并默认选中
mainForm.combobox2.add("请选择")

mainForm.combobox2.selectString("请选择")//查找并默认选中

mainForm.combobox3.add("请选择")
mainForm.combobox3.selectString("请选择")//查找并默认选中
import fsys;
import fsys.file;

//获取当前时间
now_time = tonumber( time(time.now(),"%Y%m/%d %H:%M:%S") );


var result = dbMysql.query("SELECT id,ctime,time FROM `ap_dianka` where username='soubei'");
 //console.log(level3)
for  id,time,ctime in result.each(){
   
    //获取当前时间差数
    //total_time = math.ceil((now_time -stime)/86400);
    //计算最终剩余时间
    //row_time = time-total_time;
   var result = dbMysql.query("update `ap_dianka` set nowtime="++now_time++"  where  username='soubei'");
    day = math.ceil(((ctime+time)-now_time)/86400);
    
     if(day < 1){
          win.msgboxTest("会员到期 @为了一包辣条--接私活 ","错误消息")
           return ;
     }
     mainForm.txt_log.text = "编号"+id+"会员到期:"+day+"天";
    
       
    }


//mainForm.enableDpiScaling();

mainForm.edit2.oncommand = function(id,event){
	
}
 
mainForm.show();

return win.loopMessage();

在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值