多线程应用一

1.图片下载

  1  public class Program
  2     {
  3         static void Main(string[] args)
  4         {
  5             string[] str = { "model", "sexy", "belle", "stars" };
  6             for (int url = 0; url < str.Length; url++)
  7             {
  8                 Thread thread = new Thread(DownLoad);
  9
 10                 thread.Start(str[url]);
 11             }
 12             Console.Read();
 13         }
 14
 15         public static void DownLoad(object category)
 16         {
 17             string url = string.Empty;
 18
 19             for (int purl = 9014; purl > 10; purl--)
 20             {
 21                 for (int pageSize = 0; pageSize < 20; pageSize++)
 22                 {
 23                     try
 24                     {
 25                         if (pageSize == 0)
 26                             url = "http://www.mm8mm8.com/" + category + "/" + purl + ".html";
 27                         else
 28                             url = "http://www.mm8mm8.com/" + category + "/" + purl + "_" + pageSize + ".html";
 29
 30                         //创建http链接
 31                         var request = (HttpWebRequest)WebRequest.Create(url);
 32
 33                         request.Timeout = 1000 * 5;    //5s过期
 34
 35                         var response = (HttpWebResponse)request.GetResponse();
 36
 37                         Stream stream = response.GetResponseStream();
 38
 39                         StreamReader sr = new StreamReader(stream);
 40
 41                         string content = sr.ReadToEnd();
 42
 43                         var list = GetHtmlImageUrlList(content);
 44
 45                         WebClient client = new WebClient();
 46
 47
 48                         var directoryName = @"C:\down\";
 49
 50                         if (!Directory.Exists(directoryName))
 51                             Directory.CreateDirectory(directoryName);
 52
 53                         var fileName = string.Empty;
 54
 55                         if (list.Count == 0)
 56                         {
 57                             Console.WriteLine("时间:" + DateTime.Now + " 当前网址:" + url + "  未发现图片");
 58                             break;
 59                         }
 60
 61                         try
 62                         {
 63
 64                             fileName = category + "_" + purl + "_" + (pageSize + 1) + ".jpg";
 65
 66                             var localFile = directoryName + fileName;
 67
 68                             var imageRequest = (HttpWebRequest)WebRequest.Create(list[0]);
 69
 70                             imageRequest.Timeout = 1000 * 5;  //5s 超时
 71
 72                             var imageResponse = (HttpWebResponse)imageRequest.GetResponse();
 73
 74                             var s = imageResponse.GetResponseStream();
 75
 76                             Image image = Image.FromStream(s);
 77
 78                             image.Save(localFile);
 79
 80                             image.Dispose();
 81
 82                             Console.WriteLine("时间:" + DateTime.Now + "  图片:" + fileName + " 已经下载   存入磁盘位置:" + localFile);
 83
 84                         }
 85                         catch (Exception e)
 86                         {
 87                             Console.WriteLine("时间:" + DateTime.Now + " 当前图片:" + fileName + " 错误信息:" + e.Message);
 88                             continue;
 89                         }
 90                     }
 91                     catch (Exception ex)
 92                     {
 93                         Console.WriteLine("时间:" + DateTime.Now + " 当前网址:" + url + " 错误信息:" + ex.Message);
 94                     }
 95                 }
 96             }
 97         }
 98
 99         /// <summary>
100         /// 取得HTML中所有图片的 URL。
101         /// </summary>
102         /// <param name="sHtmlText">HTML代码</param>
103         /// <returns>图片的URL列表</returns>
104         public static List<string> GetHtmlImageUrlList(string sHtmlText)
105         {
106             // 定义正则表达式用来匹配 img 标签
107             Regex regImg = new Regex(@"<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""‘]?[\s\t\r\n]*(?<imgUrl>[^\s\t\r\n""‘<>]*)[^<>]*?/?[\s\t\r\n]*>", RegexOptions.IgnoreCase);
108
109             // 搜索匹配的字符串
110             MatchCollection matches = regImg.Matches(sHtmlText);
111
112             List<string> sUrlList = new List<string>();
113
114             // 取得匹配项列表
115             foreach (Match match in matches)
116                 sUrlList.Add(match.Groups["imgUrl"].Value);
117             return sUrlList;
118         }
119     }

时间: 2024-10-26 22:39:27

多线程应用一的相关文章

Java多线程学习(吐血超详细总结)

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 目录(?)[-] 一扩展javalangThread类 二实现javalangRunnable接口 三Thread和Runnable的区别 四线程状态转换 五线程调度 六常用函数说明 使用方式 为什么要用join方法 七常见线程名词解释 八线程同步 九线程数据传递 本文主要讲了java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的一些线程函数用法.概述等. 首先讲一下进程和线程

Spring多线程

Spring是通过TaskExecutor任务执行器来实现多线程和并发编程的.使用ThreadPoolTaskExecutor可实现一个基于线程池的TaskExecutor.而实际开发中任务一般是非阻碍的,即异步的,所以我们要在配置类中通过@EnableAsync开启对异步的支持,并通过在实际执行的Bean的方法中使用@Async注解来声明其是一个异步任务. 实例代码: (1)配置类 package com.lwh.highlight_spring4.ch3.taskexecutor; /**

python进阶学习(一)--多线程编程

1. 多线程 概念:简单地说操作系统可以同时执行多个不用程序.例如:一边用浏览器上网,一边在听音乐,一边在用笔记软件记笔记. 并发:指的是任务数多余cpu核数,通过操作系统的各种任务调度算法,实现用多个任务"一起"执行(实际上总有一些任务不在执行,因为切换任务的熟度相当快,看上去一起执行而已) 并行:指的是任务数小于等于CPU核数,即任务真的是一起执行的. 2. 线程 概念:线程是进程的一个实体,是CPU调度和分派的基本单位. threading--单线程执行: 1 import ti

多线程的实现及其安全问题

一.进程和线程概述 1.进程:进程是一个具有独立功能的程序关于某个数据集合的一次运行活动,简单来说开启一个程序就开启了一个进程: 如果开启多个进程,它们之间是由于CPU的时间片在相互的切换: 2.线程:开启一个进程的一个任务,对于多线程:每一个线程都在争夺CPU的执行权(CPU的执行权具有随机性): 如果一个程序的执行路径有多条,那么该线程是多线程;反之,就单线程线程:线程是依赖于进程存在的! 3.Jvm是多线程 -- 至少开启了两条线程 main方法 主线程 gc() 垃圾回收线程 二.多线程

多线程和多进程的区别与联系

1.单进程单线程:一个人在一个桌子上吃菜.2.单进程多线程:多个人在同一个桌子上一起吃菜.3.多进程单线程:多个人每个人在自己的桌子上吃菜. 多线程的问题是多个人同时吃一道菜的时候容易发生争抢,例如两个人同时夹一个菜,一个人刚伸出筷子,结果伸到的时候已经被夹走菜了...此时就必须等一个人夹一口之后,在还给另外一个人夹菜,也就是说资源共享就会发生冲突争抢. 1.对于 Windows 系统来说,[开桌子]的开销很大,因此 Windows 鼓励大家在一个桌子上吃菜.因此 Windows 多线程学习重点

Python有了asyncio和aiohttp在爬虫这类型IO任务中多线程/多进程还有存在的必要吗?

最近正在学习Python中的异步编程,看了一些博客后做了一些小测验:对比asyncio+aiohttp的爬虫和asyncio+aiohttp+concurrent.futures(线程池/进程池)在效率中的差异,注释:在爬虫中我几乎没有使用任何计算性任务,为了探测异步的性能,全部都只是做了网络IO请求,就是说aiohttp把网页get完就程序就done了. 结果发现前者的效率比后者还要高.我询问了另外一位博主,(提供代码的博主没回我信息),他说使用concurrent.futures的话因为我全

多线程(一)

这边来谈谈java中,我对对多线程的理解 在了解多线程前,先说说进程. 进程就是正在运行的应用程序.  当你打开任务管理器的时候,你就会发现很多的进程. 而我们要说的线程,就是依赖于进程而存在的,一个进程可以开启多个线程. Thread类 说到线程,就必须来说说Thread类. Thread类是说有线程的父类.具体请参见api 线程的创建以及执行(图解如下) 继承Thread类,或者实现rennable接口. 当继承了父类后,需要重写父类的run方法,这个run方法里面就写你要执行的代码,当这个

多线程下的单例-double check

话不多说直接上代码: public sealed class Singleton { private static Singleton _instance = null; // Creates an syn object. private static readonly object SynObject = new object(); Singleton() { } public static Singleton Instance { get { // Double-Checked Lockin

笔记:多线程

多线程程序在较低的层次上扩展了多任务的概念:一个程序同时执行多个任务,通常每个任务称为一个线程(thread),他是线程控制的简称,可以同时运行一个以上线程的程序称为多线程程序(multithreaded):多线程和多进程有哪些区别呢,本质的区别在于每个进程拥有自己的一整套变量,而线程则是共享数据,Java中启动一个线程的代码如下: // 线程任务的具体实现接口 ????public interface Runnable { public abstract void run(); ????} /

多线程

1.线程的概念? 多线程,就类似与操作系统中的多进程.简单的讲,就是可 以同时并发执行多个任务,处理多件事情.这与我们经常所 谓的边唱边跳,边说边做事一个道理.? 线程是一个轻量级的进程,一个进程中可以分为多个线程. 比起进程,线程所耗费的系统资源更少,切换更加容易 /* * 进程是操作系统中的一个任务,一个程序启动运行,就会创建 * 一个(或多个)进程. * 线程是轻量级的进程.进程会有自己独立的内存空间与资源.一个进程 * 下会存在一个(或多个)线程.线程为进程的执行单元.线程本身不含有 *